Hacer una macro para importar un.csv
Me gustaría saber crear o que me ayudaran en la creación de una macro para excel. Quiero crear varios botones y agregarles una macro que su función sea, importar un .csv (que me deje escoger la ruta del csv) y pegar el contenido del csv en la línea 1 y columna A de la "hoja X" con la configuración de "delimitados", datos separados por "puntos y comas" y el formato del texto "general".
1 respuesta
H o l a : Te anexo la macro.
Cambia en la macro "hoja x" por el nombre de la hoja donde quieres poner la información de archivo importado.
Sub AbreArchivo()
'Por.Dante Amor
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set l1 = ThisWorkbook
Set h1 = l1.Sheets("hoja x")
ruta = l1.Path & "\"
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "Selecciona un archivo CSV"
.Filters.Clear
.Filters.Add "Archivos CSV", "*.csv"
.AllowMultiSelect = False
.InitialFileName = ThisWorkbook.Path & "\"
If .Show Then
Set l2 = Workbooks.Open(.SelectedItems.Item(1))
Set h2 = l1.Sheets(1)
h2.Cells.Copy h1.[A1]
l2.Close
MsgBox "Archivo importado"
End If
End With
End SubLos archivos csv están separados por el delimitador de tu sistema, es decir, si tu delimitador es el punto y coma, entonces cuando abras el archivo, automáticamente se reconocerá el separador y te pondrá una columna por cada separador, por lo tanto, no es necesario indicarle que el separador estará delimitado por punto y coma.
Prueba la macro y me comentas.
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
Hola Dante.
Antes que nada muchísimas gracias por tu interés, desgraciadamente la macro no funciona, todo lo hace bien, me sale el cuadro de dialogo, selecciono el archivo y tal, me sale el msbox" archivo importado, pero busco en la hoja "hoja x" y no ha exportado nada. Que puede estar fallando?
¿El archivo csv que seleccionas tiene información?
Envíame tu archivo de excel con la macro y tu archivo csv
Mi correo [email protected]
En el asunto del correo escribe tu nombre de usuario “Jose sc” y el título de esta pregunta.
Prueba con esta macro
Sub AbreArchivo()
'Por.Dante Amor
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set l1 = ThisWorkbook
Set h1 = l1.Sheets("hoja x")
ruta = l1.Path & "\"
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "Selecciona un archivo CSV"
.Filters.Clear
.Filters.Add "Archivos CSV", "*.csv"
.AllowMultiSelect = False
.InitialFileName = ThisWorkbook.Path & "\"
If .Show Then
Set l2 = Workbooks.Open(.SelectedItems.Item(1))
Set h2 = l2.Sheets(1)
h2.Cells.Copy h1.[A1]
l2.Close
MsgBox "Archivo importado"
End If
End With
End Sub![]()
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
Ahora si, Dante con el ultimo código exporta donde quiero. Lo único que me pega con puntos y comas y me gustaría que fuera capaz de pegar directamente convirtiendo los puntos y comas en columnas.
Espero que no sea pedirte demasiado, pero voy a darte un superexcelente como me soluciones ya lo de los puntos y comas.
Si te sirve de algo de ayuda, si importo "desde datos-> desde texto", para que la información se pegue como quiero marco "delimitados" --> siguiente, "punto y coma"---> "general" Finalizar.
Muchisimas gracias.
Pero tu delimitador es el punto y coma, entonces debería cargar el archivo sin problemas.
Revisa en el Panel de control, en Configuración regional y de idioma. En la ventana que te aparece, presiona el botón Personalizar, en la siguiente pantalla, en Separador de listas, si tienes una coma, cambia a punto y coma. Prueba nuevamente la macro

Muchas gracias, te envío la hoja que estoy haciendo y el tipo de archivo que uso y entenderás mejor el problema ahora te envío un Mail, de todas maneras te doy un excelente por las molestias que te estas tomando Dante. Saludos!
H o l a: Te anexo la macro actualizada
Sub AbreArchivo()
'Por.Dante Amor
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set l1 = ThisWorkbook
Set h1 = l1.Sheets("rf")
ruta = l1.Path & "\"
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "Selecciona un archivo CSV"
.Filters.Clear
.Filters.Add "Archivos CSV", "*.csv"
.AllowMultiSelect = False
.InitialFileName = ThisWorkbook.Path & "\"
If .Show Then
Workbooks.OpenText Filename:=.SelectedItems.Item(1), _
Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
Tab:=False, Semicolon:=True, Comma:=False, Space:=False, _
Other:=False, FieldInfo:=Array(1, 1), _
TrailingMinusNumbers:=True
'Set l2 = Workbooks.Open(.SelectedItems.Item(1))
Set l2 = ActiveWorkbook
Set h2 = l2.Sheets(1)
h2.Columns("A:A").TextToColumns Destination:=Range("A1"), _
DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, _
Comma:=False, Space:=False, Other:=False, _
FieldInfo:=Array(Array(1, 1)), _
TrailingMinusNumbers:=True
h2.Cells.Copy h1.[A1]
l2.Close
MsgBox "Archivo importado"
End If
End With
End Subsal u dos
Hola Dante,
Algo falla, no se cargan los datos...

No se cargan los números y los dos que se han cargado correspondientes a LAfmax no salen sus decimales.
Si se importa bien debería salir así:

Gracias.
¿Revisaste tu separador de listas?
Un archivo CSV (del inglés comma-separated values), espera un archivo separado por comas, pero tu archivo está separado por punto y coma. Entonces le tienes que indicar a windows, que tu separador de listas es el punto y coma; y eso lo tienes que hacer desde el panel de control.
Si no es posible lo anterior, entonces intentemos con esta macro.
Sub AbreArchivo()
'Por.Dante Amor
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set l1 = ThisWorkbook
Set h1 = l1.Sheets("rf")
h1.Select
ruta = l1.Path & "\"
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "Selecciona un archivo CSV"
.Filters.Clear
.Filters.Add "Archivos CSV", "*.csv"
.AllowMultiSelect = False
.InitialFileName = ThisWorkbook.Path & "\"
If .Show Then
With h1.QueryTables.Add(Connection:="TEXT;" & .SelectedItems.Item(1), _
Destination:=Range("$A$1"))
.Name = "archivo"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
MsgBox "Archivo importado"
End If
End With
End SubSal u dos
- Compartir respuesta