1. Esta comunidad utiliza cookies. Si continuas utilizando nuestra comunidad estás aceptando la utilización de nuestras cookies. Más información.
  2. ¡Bienvenid@ a AyudaExcel! El foro más visitado sobre Excel en habla hispana.

    Si esta es tu primera visita, asegúrate de revisar los temas de la sección Utilización y Funcionamiento para familiarizarte con las funciones del foro. Si deseas publicar mensajes, será necesario que te Registres para que puedas dejar respuestas y crear tus propios mensajes, recuerda que es gratuito.

abrir archivo txt desde excel automaticamente

Tema publicado en 'Macros y programación VBA' iniciado por diegoandres, 22 Oct 2008.

  1. diegoandres

    diegoandres Nuevo Usuario

    Reg:
    21 Oct 2008
    Mensajes:
    2
    Me Gusta recibidos:
    0
    Hola tengo un problema con una aplicacion en excel que estoy haciendo. Quisiera que teniendo excel abierto el me tome datos de un archivo .txt, y los pueda usar en excel para hacer calculos.Me dicen q se puede hacer con macro en excel pero la verdad no tengo ni idea como hacerlo, espero me puedan ayudar.Gracias.
     
  2. ioyama

    ioyama Moderador Staff AyudaExcel

    Reg:
    24 Jun 2008
    Mensajes:
    4.615
    Me Gusta recibidos:
    357
    Hola diegoandres

    Te adjunto un ejemplo que ya subí a otro foro que toma los datos de un .txt
    El nombre del fichero .txt va en la macro, asía que habría que modificarla para adaptarla a tus necesidades.

    Espero que sea esto lo que necesitas.

    Un saludo desde Vitoria
     

    Adjuntos:

  3. eddo

    eddo Usuario

    Reg:
    12 Oct 2008
    Mensajes:
    51
    Me Gusta recibidos:
    0
    hola

    podrias explicar el codigo????
     
  4. ioyama

    ioyama Moderador Staff AyudaExcel

    Reg:
    24 Jun 2008
    Mensajes:
    4.615
    Me Gusta recibidos:
    357
    Hola eddo

    ruta = ActiveWorkbook.Path & "\"
    nomfic = "prueba.txt"

    Supongo que el fichero de texto va a estar en la misma ruta que la hoja de excel, luego asigno a la variable ruta la ruta del fichero Excel.
    asigno el nombre del fichero de texto a otra variable

    With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;" & ruta & nomfic, Destination:=Range("A1"))
    .TextFileCommaDelimiter = True
    ' .TextFileSpaceDelimiter = True
    .Refresh BackgroundQuery:=False
    End With

    Importo el fichero de texto delimitado por comas (he dejado la opción de delimitado por espacios sin activar ya que cuando subí el ejemplo al otro foro no estaba claro cuáles eran las necesidades del solicitante)

    uc = Range("IV1").End(xlToLeft).Column - 1
    fil = 2

    Veo cuál es la última columna y asigno a una variable la primera fila de trabajo

    For col = 1 To uc
    uspas = Application.WorksheetFunction.Trim(Cells(1, col))
    us = Left(uspas, Application.WorksheetFunction.Find("]", uspas))
    pas = Right(uspas, Len(uspas) - Application.WorksheetFunction.Find("]", uspas) - 1)
    Range("A" & fil) = us
    Range("B" & fil) = pas
    fil = fil + 1
    Next col

    Con el bucle voy separando los términos importados en cada celda de la fila 1 en los dos partes que llevan y los voy situando en las columnas A y B

    Rows("1:1").Select
    Selection.QueryTable.Delete
    Selection.Delete Shift:=xlUp
    Range("A1").Select

    Finalmente elimino la importación realizada y listo.

    Realmente va a depender de cómo estén tus datos en el fichero de texto para realizar un tratamiento u otro.

    Siempre queda la posibildad de que subas tu fichero de texto y cómo quieres que te quede en Excel.

    Un saludo desde Vitoria
     
  5. diegoandres

    diegoandres Nuevo Usuario

    Reg:
    21 Oct 2008
    Mensajes:
    2
    Me Gusta recibidos:
    0
    Hola Ioyama

    probe tu codigo con mi txt y si me funciono solo que mi txt son numeros que bienen de la siguiente forma:

    152.95 206.29 141.10 195.97 111.40 133.26 178.65 125.01 152.24 320.57 283.85 592.87 262.40 219.49 200.92 157.19 195.15 251.67 182.36 200.51 187.72 197.62 170.39 174.93 179.47 -145.64 70.96 138.21 191.02 151.00 199.69 102.32 186.07 112.22 200.10 152.65 158.43 153.89 122.95 259.92 176.58 204.64 285.50 184.83 208.76 220.73 224.44 -76.74 193.50 179.06 215.36 219.49 172.46 140.69 174.93 213.71 93.24 141.93 168.74 201.75

    Entonces todo me aparace en la primera columa de excel y no cada dato en una celda como deberia ser. Y lo otro es que en vez de existir el boton de ejecutar la macro deberia esta accion realizarse automaticamente cada vez que abro la hoja de excel ( es decir actualizar al abrir excel)

    Si me pudes ayudar estare eternamente agradecido. Esto es muy importante para mi
     
  6. ioyama

    ioyama Moderador Staff AyudaExcel

    Reg:
    24 Jun 2008
    Mensajes:
    4.615
    Me Gusta recibidos:
    357
    Hola Diego

    Sube tu archivo de texto comprimido a .txt e indica como quieres que te queden los datos en la hoja de excel y veré que puedo hacer.

    Un saludo desde Vitoria
     
  7. Esaul

    Esaul Nuevo Usuario

    Reg:
    10 Sep 2008
    Mensajes:
    21
    Me Gusta recibidos:
    0
    Género:
    Masculino
    Archivos TXT para excel

    Si lo deseas mandame un archivo en formato .TXT exactamente como baja del sistema padre y puesto en la celda "A1" de una hoja. En la otra hoja dime como quieres los datos. Te mando de vuelta una macro para que haga el parse correspondiente, no importando la cantidad de datos. Generalmente lo mas dificil es saber como quiere que queden los datos. Mi correo es: apolopealo@hotmail.com Te garantizo seriedad
     
  8. krloscmpc

    krloscmpc Nuevo Usuario

    Reg:
    7 Ene 2009
    Mensajes:
    1
    Me Gusta recibidos:
    0
    Hola probe el código

    Hola amigo he probado el codigo y pienso que me puede funcionar con mi caso, no se si me puedas ayudar si te envio mi archivo de texto y como se debe mostrar en excel.

    Te lo agradecerìa mucho
     
  9. dlezcano

    dlezcano Nuevo Usuario

    Reg:
    23 Abr 2009
    Mensajes:
    6
    Me Gusta recibidos:
    0
    Hola Amigos, he revisado este forum, pero los ejemplos no se acomodan mucho a lo que he andado buscando, de todos modos he visto las ganas de apoyar, por lo que les envio un archivo de cptura de un emulador, este archivo me bota un error MFC010, y varios campos adicionales , los cuales me gustaria plasmar en un archivo excel, aqui le adjunto una parte del archivo txt y como deberia de quedar en excel

    Salusod y muchas gracias por su pronta ayuda


    Ver archivo adjunto captura_errores.zip
     
  10. juan00

    juan00 Nuevo Usuario

    Reg:
    22 Oct 2009
    Mensajes:
    11
    Me Gusta recibidos:
    0
    Respuesta: abrir archivo txt desde excel automaticamente

    Gracias, buena respuesta, trataré de adaptarla..

    ioyama...

    y si yo necesito ir a buscar el archivo de texto a una ubicacion x (ya el texto estará en un servidor) y traerlo a la hoja q necesito, se puede adaptar bien tu código?
     
    Última edición: 22 Oct 2009
  11. fcorodiles

    fcorodiles Nuevo Usuario

    Reg:
    31 Oct 2011
    Mensajes:
    1
    Me Gusta recibidos:
    0
    En la actualidad yo tengo que abrir archivos de texto y luego abrirlos con excel pero que queden acomodados los datos en diferentes columnas busque y me encontre muchas cosas que juntandolas fueron una maravilla, te lo explico, primero abres el VB de excel y creas una funcion y copias el siguiente codigo: (no le hagas ningun cambio solo copiala en la funcion)
    Option Explicit


    Function ImportFixedWidth(FileName As String, _
    StartCell As Range, _
    IgnoreBlankLines As Boolean, _
    SkipLinesBeginningWith As String, _
    ByVal FieldSpecs As String) As Long
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' ImportFixedWidth
    ' By Chip Pearson, chip@cpearson.com Excel Redirect
    ' Date: 27-August-2011
    ' Compatible with 64-bit platforms.
    '
    ' This function imports text from a fixed field width file.
    ' FileName is the name of the file to import. StartCell is
    ' the cell in which the import is to begin. IgnoreBlankLines
    ' indicates what to do with empty lines in the text file. If
    ' IgnoreBlankLines is False, an empty row will appear in the
    ' worksheet. If IgnoreBlankLines is True, no empty row will
    ' appear in the worksheet. SkipLinesBeginingWith indicates
    ' what character, if any, at the begining of the line indicates
    ' that the line should not be imported, such as fpr providing for
    ' comments within the text file. FieldSpecs indicates how to
    ' map the data into cells. It is a string of the format:
    ' start,length|start,length|start,length...
    ' where each 'start' is the character position of the field
    ' in the text line and each 'length' is the length of the field.
    ' For example, if FieldSpecs is
    ' 1,8|9,3|12,5
    ' indicates the first field starting in position 1 for a
    ' length of 8, the second field starts in position 9 for a
    ' length of 3, and finally a field beginning in position 12
    ' for a length of 5. Fields can be in any order and may
    ' overlap.
    ' You can specify a number format for the field which will
    ' be applied to the worksheet cell. This format should not
    ' be in quotes and should follow the length element. For example,
    ' 2,8|9,3,@|12,8,dddd dd-mmm-yyyy
    ' This specifies that no formatting will be applied to column 2,
    ' the Text (literal) format will be applied to column 9, and
    ' the format 'dddd dd-mmm-yyyy' will be applied to column 12.
    '
    ' The function calls ImportThisLine, which should return
    ' True to import the text from the file, or False to skip
    ' the current line.
    ' This function returns the number of records imported if
    ' successful or -1 if an error occurred.
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


    Dim FINdx As Long
    Dim C As Long
    Dim R As Range
    Dim FNum As Integer
    Dim S As String
    Dim RecCount As Long
    Dim FieldInfos() As String
    Dim FInfo() As String
    Dim N As Long
    Dim T As String
    Dim B As Boolean

    If Dir(FileName, vbNormal) = vbNullString Then
    ' file not found
    ImportFixedWidth = -1
    Exit Function
    End If

    If Len(FieldSpecs) < 3 Then
    ' invalid FieldSpecs
    ImportFixedWidth = -1
    Exit Function
    End If

    If StartCell Is Nothing Then
    ImportFixedWidth = -1
    Exit Function
    End If

    Set R = StartCell(1, 1)
    C = R.Column
    FNum = FreeFile
    On Error GoTo EndOfFunction:
    Open FileName For Input Access Read As #FNum
    ' get rid of any spaces
    FieldSpecs = Replace(FieldSpecs, Space(1), vbNullString)
    ' omit double pipes ||
    N = InStr(1, FieldSpecs, "||", vbBinaryCompare)
    Do Until N = 0
    FieldSpecs = Replace(FieldSpecs, "||", "|")
    N = InStr(1, FieldSpecs, "||", vbBinaryCompare)
    Loop
    ' omit double commas
    N = InStr(1, FieldSpecs, ",,", vbBinaryCompare)
    Do Until N = 0
    FieldSpecs = Replace(FieldSpecs, ",,", ",")
    N = InStr(1, FieldSpecs, ",,", vbBinaryCompare)
    Loop

    ' get rid of leading and trailing | characters, if necessary
    If StrComp(Left(FieldSpecs, 1), "|", vbBinaryCompare) = 0 Then
    FieldSpecs = Mid(FieldSpecs, 2)
    End If
    If StrComp(Right(FieldSpecs, 1), "|", vbBinaryCompare) = 0 Then
    FieldSpecs = Left(FieldSpecs, Len(FieldSpecs) - 1)
    End If

    Do
    ' read the file
    Line Input #FNum, S
    If (SkipLinesBeginningWith = vbNullString) Or (SkipLinesBeginningWith <> vbNullString And _
    StrComp(Left(Trim(S), Len(SkipLinesBeginningWith)), _
    SkipLinesBeginningWith, vbTextCompare)) Then
    If Len(S) = 0 Then
    If IgnoreBlankLines = False Then
    Set R = R(2, 1)
    Else
    ' do nothing
    End If
    Else
    ' allow code to change the FieldSpecs values

    If FieldSpecs = vbNullString Then
    ' FieldSpecs is empty. Do nothing, don't import.
    Else
    If ImportThisLine(S) = True Then
    FieldInfos = Split(FieldSpecs, "|")
    C = R.Column
    For FINdx = LBound(FieldInfos) To UBound(FieldInfos)
    FInfo = Split(FieldInfos(FINdx), ",", 3)
    If UBound(FInfo) >= 2 Then
    R.EntireRow.Cells(1, C).NumberFormat = FInfo(2)
    End If
    R.EntireRow.Cells(1, C).Value = Mid(S, CLng(FInfo(0)), CLng(FInfo(1)))
    C = C + 1
    Next FINdx
    RecCount = RecCount + 1
    Set R = R(2, 1)
    End If

    End If
    End If
    Else
    ' no skip first char
    End If

    Loop Until EOF(FNum)

    EndOfFunction:
    If Err.Number = 0 Then
    ImportFixedWidth = RecCount
    Else
    ImportFixedWidth = -1
    End If
    Close #FNum
    End Function


    Private Function ImportThisLine(S As String) As Boolean
    Dim N As Long
    Dim NoImportWords As Variant
    Dim T As String
    Dim L As Long

    NoImportWords = Array("page", "product", "xyz")
    For N = LBound(NoImportWords) To UBound(NoImportWords)
    T = NoImportWords(N)
    L = Len(T)
    If StrComp(Left(S, L), T, vbTextCompare) = 0 Then
    ImportThisLine = False
    Exit Function
    End If
    Next N
    ImportThisLine = True
    End Function


    Despues de esto ya en el modulo creas la siguiente subrutina:

    Sub TestImport()


    Dim L As Long
    Dim ruta As String
    Sheets("Original").Select
    ActiveWindow.SelectedSheets.Delete
    Sheets.Add After:=Sheets(Sheets.Count)
    nombre = ActiveSheet.Name

    L = ImportFixedWidth(FileName:=Sheets("Ejecuta").Range("E4").Value, _
    StartCell:=Range("A1"), _
    IgnoreBlankLines:=True, _
    SkipLinesBeginningWith:=vbNullString, _
    FieldSpecs:="1,5|6,10|16,24|40,13|53,9|62,2|64,2|66,7|73,6|79,3|82,2|84,4|88,2|90,11|101,11|112,6|118,17|")

    'En esta subrutina lo unico que tienes que cambiar es el fieldspecs que veraz se componen de num1,num2 significa: num1=posicion en la cual comenzara la columna y num2= numero de caracteres a tomar en este ejemplo significa que la primera columna tomara del caracter 1 al 5 la primera columna ya que comienza en el 1 y toma 5 caracteres, se divide por un pipe y toma del caracter 6 y toma de ahi 10 posiciones y asi subsecuentemente.

    'Tambien lo que tienes que cambiar es el file name yo lo tengo direccionado a una ruta que puse en una celda de una hoja especifica.


    End Sub



    Y tambien agradezco a la persona que desarrollo la funcion por supuesto deje el texto del credito en la misma.
     

Compartir esta página