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

Respuesta
1

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 Sub

Los 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 Sub

sal 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 Sub

Sal u dos

¡Gracias! 

Con esa macro ahora funciona a la perfección!!!! 

Soy el más feliz en la faz de la tierra de verdad muchas gracias.

Eres un crack, gracias por tu paciencia y por tu sabiduria en este mundo.

Gracias, personas como tu hacen de este foro algo enorme! 

Gracias de nuevo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas