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
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
- Abre tu libro de Excel
- Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
- En el menú elige Insertar / Módulo
- En el panel del lado derecho copia la macro
- Ahora para crear un botón, puedes hacer lo siguiente:
- Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
- Elige una imagen y con el Mouse, dentro de tu hoja, presiona click y arrastra el Mouse para hacer grande la imagen.
- 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”
- Vuelve a presionar click derecho dentro de la imagen y ahora selecciona: Asignar macro. Selecciona: LeerNotePad
- Aceptar.
- Para ejecutarla dale click a la imagen.
- Compartir respuesta