Holas buenas noches: necesito que los archivos txt se copien en cada hoja de un libro maestro de excel, es decir, si genera los txt lecturainferior, residencial, gral. cada uno de estos archivo quiero que se copie en el libro maestro cuyas hojas tienen el mismo nombre. el delimitador para los txt es el espacio. Desde ya muchas gracias por su tiempo. atento a cualquier duda espero vuestros comentarios.
Adjunto | Tamaño |
---|---|
archivo_maestro.xlsx | 8.28 KB |
gral.xls | 677 bytes |
lecturainferior.xls | 7.76 KB |
residencial.xls | 2.79 KB |
Lo que necesitas no es rápido. Afortunadamente, lo tengo medio resuelto en varios trabajos previos, por lo que te pondré por aquí algunos ejemplos.
Te puedes crear un archivo que se llame "tratamiento datos.xlsm" o algo así. Dentro pon un botón, y asigna al click del botón el siguiente código:
Sub AbreArchivo()
Dim fDialog As Office.FileDialog
Application.ScreenUpdating = False
Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
With fDialog
.AllowMultiSelect = False
.Title = "Selecciona un archivo .txt a tratar"
.Filters.Clear
.InitialFileName = ""
.Filters.Add "Archivos a tratar", "*.txt"
.Filters.Add "Todos los archivos", "*.*"
' Muestra el diálogo. Si el método .Show devuelve un valor True, el
' usuario seleccionó un archivo. Si el método .Show devuelve
' False, el usuario pinchó en Cancelar.
If .Show = True Then
Button1.tag = .SelectedItems(1)
AbreArchivo2
Else
MsgBox "Has cancelado la apertura."
End If
End With
End Sub
Cron, muchas gracias por el aporte, te cuento que cuando ejecute la macro me sale un error en tiempo de ejecucion, mas precisamente en la linea button1.tag =.seleteditems(1),he buscado para ver cual es el error sin resultado positivo, en adjunto envío lo indicado con pantalla capturada del mensaje de error. Agradezco tu tiempo.
En esa línea lo que hago es utilizar una propiedad que tienen todos los objetos (.tag) que es de tipo variant.
Lo utilizo para enviar información entre diferentes rutinas, evitando así tener que trabajar con una variable global, y evitando también tener que enviar parámetros, etc.
La propiedad .tag es siempre de tipo variant, por lo que se puede almacenar cualquier cosa.
En mi caso, el botón se llama Button1
Por eso mi línea es
Button1.tag = ...........
Pero tú le cambiaste el nombre al botón, y en tu caso se llama "Abrearchivo" (creo)
Por eso tú deberías escribir:
Abrearchivo.tag = ..........
Con esto debería valer.
Nota al margen: es buena práctica cambiar los nombres a los objetos por nombres que sean descriptivos. Se recomienda que la nomenclatura incluya el tipo de objeto que es.
Por ejemplo, el nombre de todos los cuadros de texto podría empezar por txt (txtNombre, txtDirección...), el nombre de todas las etiquetas podría empezar por lbl (lblTítulo...) y el de los botones por btn (btnAbreArchivo...)
De esta manera te aseguras de que no llamas igual a un procedimiento que a un objeto, o que no llamas igual a dos objetos diferentes. Y en código estás seguro de que te refieres al objeto que quieres.
Un saludo