Como hacer Macro de excel que importe notepads

Necesito macro de excel de importe datos de notepads a excel y poder cambiar de note pads que la tabla se modifiquue automáticamente. Muestro en la imagen mis dos note pads y con colores identifico cual es el dato correspondiente que ocupara en la tabla, pero mis notes pads van a ser variados diferentes nombres y diferentes valores pero necesito que se acomoden en esas posiciones, necesitaría que me diera a elegir el nombre del documento, sera siempre el mismo formato pero otros valores, agradecería su ayuda,

1 respuesta

Respuesta
1

H o l a:

Para realizar la macro tienes que explicar cómo se debe realizar la actualización.

Envíame 3 archivos, tu archivo de excel, y 2 archivos notepad.

Supongo que los archivos que su nombre termina en A actualizan a la tabla "Conector A" y que los B a la tabla "Conector B"

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Rodolfo Sánchez” y el título de esta pregunta.

Buenos días :) ya te envíe la información que me solicitaste por correo y te anexo una foto más lustrativa, esta trasferencia de datos se realiza con un redondeo a 2 dígitos.

H o l a:

Te anexo la macro

Sub LeerNotePad()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set l1 = ThisWorkbook
    Set h1 = l1.ActiveSheet
    ruta = l1.Path & "\"
    ChDir ruta
    '
    With Application.FileDialog(msoFileDialogFilePicker)
        .Title = "Seleccione archivo NotePad"
        .Filters.Clear
        .Filters.Add "All Files", "*.*"
        .Filters.Add "Archivos Txt", "*.txt*"
        .FilterIndex = 2
        .AllowMultiSelect = False
        .InitialFileName = ruta
        If .Show Then
            letra = Mid(.SelectedItems.Item(1), Len(.SelectedItems.Item(1)) - 4, 1)
            If letra = "A" Then
                col = Columns("C").Column
            ElseIf letra = "B" Then
                col = Columns("H").Column
            Else
                MsgBox "El archivo no tiene la nomenclatura", vbCritical, "ERROR DE ARCHIVO"
                Exit Sub
            End If
            '
            Set l2 = Workbooks.Open(.SelectedItems.Item(1))
            Set h2 = l2.Sheets(1)
            Set r = h2.Columns("A")
            Set b = r.Find("J1: Ch.", lookat:=xlPart)
            If Not b Is Nothing Then
                ncell = b.Address
                Do
                    'detalle
                    p = InStrRev(h2.Cells(b.Row, "A"), ".")
                    num = Mid(h2.Cells(b.Row, "A"), p + 1)
                    dato1 = Split(h2.Cells(b.Row + 1, "A"), ",")
                    dato2 = Split(h2.Cells(b.Row + 2, "A"), ",")
                    If h1.Cells(8 + num, col) = Val(num) Then
                        h1.Cells(8 + num, col + 1) = dato1(1)
                        h1.Cells(8 + num, col + 2) = dato1(3)
                        h1.Cells(8 + num, col + 3) = dato2(1)
                        h1.Cells(8 + num, col + 4) = dato2(3)
                    End If
                    Set b = r.FindNext(b)
                Loop While Not b Is Nothing And b.Address <> ncell
            End If
            l2.Close
        End If
    End With
    MsgBox "Proceso terminado", vbInformation, "LEER ARCHIVOS"
End Sub

S a l u d o s . D a n t e   A m o r. Recuerda valorar la respuesta. G r a c i a s

Esta perfecto! importo bien solo que en dos renglones no me salen los datos , y sinceramente no supe como modificarlo, cual seria el detalle ?.  y como puedo dejar el macro que de la opcion de elegir documento al abrirlo o de que forma  puedo evitar el correrlo desde visual basic.

Los archivos txt que me enviaste no tenían los números Ch.5 y Ch.6, pero venían los Ch.13 y Ch.4. La macro verifica el número, para cargarlo en su correspondiente.

Valora esta respuesta. Y crea una nueva para esto que necesitas:

"y como puedo dejar el macro que de la opcion de elegir documento al abrirlo o de que forma puedo evitar el correrlo desde visual basic." Me explicas con un ejemplo, porque no entendí a qué te refieres.

me di cuenta que tomaste los datos en base al los Ch1, ch2 etc, pero esos datos corresponden a el puerto de la maquina  y normalmente varian, igual me seria de utilidad el simple hecho que tome los puertos  del ch4 se brinca al ch7 , pero para que quedara general se pudiera tomar otra forma de acomodar los datos sin tomar el ch como parte de la importación de datos.

Te anexo la macro actualizada, para que llene del 1 al 12.

Sub LeerNotePad()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set l1 = ThisWorkbook
    Set h1 = l1.ActiveSheet
    ruta = l1.Path & "\"
    ChDir ruta
    '
    With Application.FileDialog(msoFileDialogFilePicker)
        .Title = "Seleccione archivo NotePad"
        .Filters.Clear
        .Filters.Add "All Files", "*.*"
        .Filters.Add "Archivos Txt", "*.txt*"
        .FilterIndex = 2
        .AllowMultiSelect = False
        .InitialFileName = ruta
        If .Show Then
            letra = Mid(.SelectedItems.Item(1), Len(.SelectedItems.Item(1)) - 4, 1)
            If letra = "A" Then
                col = Columns("C").Column
            ElseIf letra = "B" Then
                col = Columns("H").Column
            Else
                MsgBox "El archivo no tiene la nomenclatura", vbCritical, "ERROR DE ARCHIVO"
                Exit Sub
            End If
            '
            num = 9
            Set l2 = Workbooks.Open(.SelectedItems.Item(1))
            Set h2 = l2.Sheets(1)
            Set r = h2.Columns("A")
            Set b = r.Find("J1: Ch.", lookat:=xlPart)
            If Not b Is Nothing Then
                ncell = b.Address
                Do
                    dato1 = Split(h2.Cells(b.Row + 1, "A"), ",")
                    dato2 = Split(h2.Cells(b.Row + 2, "A"), ",")
                    h1.Cells(num, col + 1) = dato1(1)
                    h1.Cells(num, col + 2) = dato1(3)
                    h1.Cells(num, col + 3) = dato2(1)
                    h1.Cells(num, col + 4) = dato2(3)
                    num = num + 1
                    Set b = r.FindNext(b)
                Loop While Not b Is Nothing And b.Address <> ncell
            End If
            l2.Close
        End If
    End With
    MsgBox "Proceso terminado", vbInformation, "LEER ARCHIVOS"
End Sub

S a l u d o s . D a n t e   A m o r. Recuerda valorar la respuesta. G r a c i a s

Yo lo que hice fue abrir mi archivo de excel, me fui a programador y a visual basic, hay metí el código que me proporcionaste y de hay lo corro con el logo de play, pero de esta forma se tiene que hacer, ¿o puedo hacerlo desde el mismo doc de excel? Realmente soy muy nuevo en esto una disculpa

Te envié el archivo para que ejecutes la macro desde un botón, o crea un botón:

Sigue las Instrucciones para un botón y ejecutar la macro

  1. Abre tu libro de Excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo
  4. En el panel del lado derecho copia la macro
  5. Ahora para crear un botón, puedes hacer lo siguiente:
  6. Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
  7. Elige una imagen y con el Mouse, dentro de tu hoja, presiona click y arrastra el Mouse para hacer grande la imagen.
  8. Una vez que insertaste la imagen en tu hoja, dale click derecho dentro de la imagen y selecciona: Tamaño y Propiedades. En la ventana que se abre selecciona la pestaña: Propiedades. Desmarca la opción “Imprimir Objeto”. Presiona “Cerrar”
  9. Vuelve a presionar click derecho dentro de la imagen y ahora selecciona: Asignar macro. Selecciona: LeerNotePad
  10. Aceptar.
  11. Para ejecutarla dale click a la imagen.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas