Excel - Cargar archivo txt (Macro)

 
Vista:

Cargar archivo txt (Macro)

Publicado por Fernando G (1 intervención) el 18/08/2006 00:54:00
Saludos,

Estoy trabajando en una hoja de excel que se alimentara de un archivo txt, pero quiero hacerlo mediante programacion, que cada vez que presione un boton que colocare, me lea el archivo txt y me lo agregra a la hoja pero a partir de la ultima celda con datos, o sea, no que lo agrege siempre desde el principio o desde donde yo le especifique, sino que continue a partir del ultimo registro de esa hoja.

sin otro particular...
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Abraham Valencia
Val: 313
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

RE:Cargar archivo txt (Macro)

Publicado por Abraham Valencia (2415 intervenciones) el 18/08/2006 17:12:10
Aqui agregas tus datos a partir de la primera celda vacia de la columna A. Cada vez que se agreguen datos, buscara la celda vacia.

Sub agregartxt()

Dim celdavacia As String

Sheets("nombredetuhoja").Select
Range("A1").Select
Do While ActiveCell <> Empty
ActiveCell.Offset(1, 0).Select
Loop
celdavacia = activecel.Address

With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\turuta\nombredetuarchivo.txt", Destination:= Range(celdavacia))
.Name = "nombredetuarchivo"

'.......tu rutina ...

End With

End Sub

Abraham
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cargar archivo txt (Macro)

Publicado por JuanC (792 intervenciones) el 18/08/2006 21:53:40
Después de mucho probar diferentes métodos
para encontrar la 'Bendita primer celda vacía',
llegué a la conclusión de que los métodos
más lentos son los que utilizan bucles
Do Loop / While
o el método Find / FindNext
Después le siguen (en orden de velocidad) los bucles
For Each
Next
siendo estos bastante aceptables y los más
rápidos para procesar muchos datos en diversas situaciones.
Pero el método más veloz -por excelencia- para encontrar
la primer celda vacía -sin importar la
cantidad de datos que haya que procesar-
es el siguiente:

Sub test()
Dim rng As Range
Set rng = UltimaCeldaConDato("a", 1)
If Not rng Is Nothing Then
If rng.Row <> Cells.Rows.Count Then
MsgBox "Primer celda vacía: " & rng.Offset(1, 0).Address
Else
MsgBox "No hay celdas vacías después de la última celda con datos!"
End If
Else
MsgBox "Primer celda vacía: $A$1"
End If
Set rng = Nothing
End Sub

Private Function UltimaCeldaConDato(ByVal sColumna As String, ByVal lFilaPivot As Long) As Range
Dim lRow&, iCol%
Set UltimaCeldaConDato = Nothing

If lFilaPivot >= Cells.Rows.Count Or lFilaPivot <= 0 Then Exit Function
iCol = cLetterToNumber(sColumna)

If iCol <= 0 Or iCol > Cells.Columns.Count Then Exit Function

If Range(sColumna & Cells.Rows.Count).Value <> "" Then
lRow = Cells.Rows.Count
Else
lRow = Range(sColumna & Cells.Rows.Count).End(xlUp).Row
End If

If Not (lRow = 1 And IsEmpty(Cells(lRow, iCol).Value)) Then
Set UltimaCeldaConDato = Range(Cells(lRow, iCol).Address)
End If

End Function

Private Function cLetterToNumber(ByVal sLetter As String) As Integer
Dim l%, n%
cLetterToNumber = 0
l = Len(Trim(sLetter))
If l = 0 Or l > 2 Then Exit Function
If l = 1 Then
n = Asc(LCase(sLetter)) - 96
If n > 0 And n <= 26 Then cLetterToNumber = n
Exit Function
Else
cLetterToNumber = cConvLtrToNum(UCase(sLetter))
End If
End Function

Private Function cConvLtrToNum(ByVal LtrIn As String) As Integer
Dim sChar$, iNum%, i%, sString$, l%
Dim iArray() As Integer, iPower%
sChar = "": iNum = 0: cConvLtrToNum = 0
l = Len(LtrIn)
For i = 1 To l
sString = ""
sChar = Mid(LtrIn, i, 1)
If Asc(sChar) < 65 Or Asc(sChar) > 90 Then Exit Function
ReDim Preserve iArray(i)
iArray(i) = Asc(sChar) - 64
Next

iPower = UBound(iArray()) - 1
l = UBound(iArray())

For i = 1 To l
iNum = iNum + (iArray(i) * (26 ^ iPower))
iPower = iPower - 1
Next

If iNum > Cells.Columns.Count Then
cConvLtrToNum = 0
Else: cConvLtrToNum = iNum
End If
End Function

Saludos desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cargar archivo txt (Macro)

Publicado por frany (62 intervenciones) el 19/08/2006 23:01:12
si usara sombrero me lo quitaria.

No he probado el codigo, pero conociendo al programador creo que es el mejor metodo sin duda. ya que de lo que he leido de codigo no entiendo casi ni la mitad, se ve que me falta muchisimo.

:-)
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cargar archivo txt (Macro)

Publicado por Guillermo Danilo Becerra (3 intervenciones) el 20/08/2006 04:03:33
Humm
No eres la unica persona en esas condiciones....
Exitos en tu emprendimiento
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cargar archivo txt (Macro)

Publicado por JuanC (792 intervenciones) el 20/08/2006 16:14:00
Muchachos, acá va otro engendro veloz... y más simple!
El que busca encuentra, no? Cada día algo nuevo...

Sub test()
MsgBox UltimaCeldaConDatos([b2])
End Sub

Function UltimaCeldaConDatos(rngPivot As Range) As String
Dim rng As Range
Dim i&, lCount&
On Error Resume Next
Set rng = rngPivot.Columns(1).EntireColumn
Set rng = Intersect(rng.Parent.UsedRange, rng)
lCount = rng.Count

For i = lCount To 1 Step -1
If Not IsEmpty(rng(i)) Then
If rng(i).Row <> Cells.Rows.Count Then
UltimaCeldaConDatos = rng(i).Offset(1, 0).Address
Else
UltimaCeldaConDatos = ""
End If
Exit Function
End If
Next i

UltimaCeldaConDatos = rngPivot.Address

Set rng = Nothing
End Function

Saludos desde Baires, JuanC

PD: en ambos casos falta probar con filtros aplicados y otros casos particulares
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cargar archivo txt (Macro)

Publicado por frany (58 intervenciones) el 15/11/2009 21:13:32
Endemonidadamente resido si señor.
Un saludo JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar