Saludos,
La opción más asequible que yo veo es:
Pues lo que deberías hacer es guardar el archivo en un string, mediante la lectura del fichero Txt.
Carga en un Flexgrid el contenido de la Cadena, interpretando vbTab para insertar nueva columna y vbNewLine para insertar nueva Fila.
Luego utiliza este sub:
'Objeto de Hoja de Excel
Dim ApExcel As Variant, iPosCol() As Integer
Public Sub ExportarExcel(Grid As MSFlexGrid, BARRA As ProgressBar, sTitFic As String, Optional sTitHoja As String)
Dim I As Integer, J As Integer, sRango As String
Dim sCol As String, iUltPos As Integer, sAux As String
Dim NoColRej As Integer 'Capturar el Nº de columnas visibles
Dim sHojCal As String
Dim iFch As Long
Const iNReg As Integer = 200
'Const iFilaIni As Integer = 6
Dim iFila As Integer 'Nº de filas agregadas
Dim iNPaste As Integer 'Nº de veces que hemos pegado
'On Error Resume Next
'SETEAMOS EL EXCEL
Set ApExcel = CreateObject("Excel.application")
' Hace que Excel no se vea
ApExcel.Visible = False
'determina el numero de hojas que se mostrara en el Excel
ApExcel.SheetsInNewWorkbook = 1
'Agrega un nuevo Libro
ApExcel.Workbooks.Add
iNPaste = 0
With ApExcel '.Cells(Fila,Columna)
'Cambiar el nombre de la ficha
.Sheets("Hoja1").Select
.Sheets("Hoja1").Name = sTitFic
'Iniciar barra de progreso para visualizar progreso
BARRA.Min = 0
BARRA.Max = Grid.Rows - 1
BARRA.Value = 0
BARRA.Visible = True
Grid.Visible = False
ExcelCancel = False
Screen.MousePointer = 11
'Exportar los datos
sHojCal = ""
iFila = 1
If sTitHoja <> "" Then
sHojCal = sHojCal & sTitHoja & vbNewLine
End If
For I = 1 To Len(sTitHoja)
If Mid(sTitHoja, I, 2) = vbNewLine Then
iFila = iFila + 1
End If
Next
For J = 0 To Grid.Rows - 1
If Grid.RowHeight(J) > 0 Then
DoEvents
For I = 1 To Grid.Cols - 1 'Establece las columnas
If Grid.ColWidth(I) > 0 Then
If Mid(Grid.TextMatrix(J, I), 3, 1) = "/" And Mid(Grid.TextMatrix(J, I), 6, 1) = "/" Then
iFch = DateSerial(Year(Grid.TextMatrix(J, I)), Month(Grid.TextMatrix(J, I)), Day(Grid.TextMatrix(J, I)))
sHojCal = sHojCal & Format(iFch, "mm/dd/yy") & vbTab
ElseIf InStr(1, Grid.TextMatrix(J, I), vbNewLine, vbTextCompare) <> 0 Then
sHojCal = sHojCal & Replace(Grid.TextMatrix(J, I), vbNewLine, " ") & vbTab
Else
'Grabar en formato plano (remplaza el simbolo de coma por punto para que lo reconozca el excel como valor númerico)
sHojCal = sHojCal & Replace(Grid.TextMatrix(J, I), ",", ".") & vbTab
End If
End If
Next I
If ExcelCancel Then
BARRA.Value = BARRA.Max
Else
If BARRA.Value < BARRA.Max Then
BARRA.Value = BARRA.Value + 1
End If
End If
'frmVtaGam.Caption = Format(BARRA.Value / BARRA.Max, "0%")
iFila = iFila + 1
sHojCal = sHojCal & vbNewLine
If iFila Mod iNReg = 0 Then
'Pegar desde el portapapeles
Clipboard.Clear
Clipboard.SetText sHojCal
.Range("A" & (iFila - iNReg) + 1).Select
.ActiveSheet.Paste
Clipboard.Clear
sHojCal = ""
iNPaste = iNPaste + 1
End If
End If
Next J
'Volcamos el resto, que no ha llegado a iNReg
'Pegar desde el portapapeles
Clipboard.Clear
Clipboard.SetText sHojCal
.Range("A" & (iNPaste * iNReg) + 1).Select
.ActiveSheet.Paste
Clipboard.Clear
sHojCal = ""
'Hace que Excel se vea
ApExcel.Visible = True
Set ApExcel = Nothing
End With
Screen.MousePointer = 0
Set ApExcel = Nothing
Grid.Visible = True
BARRA.Visible = False
End Sub