Importar CSV en Access VBA

Bilal Shahid 21 junio 2023
  1. Cómo vincular un archivo CSV a la base de datos de Access
  2. Archivo CSV delimitado por punto y coma
  3. Exportar un archivo de texto manualmente a MS Access
  4. Conclusión
Importar CSV en Access VBA

VBA proporciona a los desarrolladores una variedad de funciones y características diferentes. Este artículo lo guiará sobre cómo importar CSV a Access VBA.

Cómo vincular un archivo CSV a la base de datos de Access

¿Por qué usar el código VBA para importar datos cuando tiene otras opciones disponibles? La importación de datos a través de códigos VBA lo ayuda a navegar y trabajar con varios formatos que no están disponibles cuando importa datos mediante la interfaz visual.

Además, en un nivel más práctico, cuando tiene que realizar la misma importación un par de veces, la importación de datos con códigos VBA es un método eficiente, más accesible y más rápido para hacer el trabajo por usted.

Crea una función que se puede usar cada vez, lo que hace que el proceso sea más rápido y fácil que pasar por el asistente de importación cada vez.

CSV significa Valores separados por comas. Esto significa que la función de importación predeterminada busca comas en el archivo.

Sin embargo, si está usando algo más que comas, puede probar los siguientes pasos para que funcione.

  • Primero, importe el archivo manualmente.
  • Una vez que haya especificado la configuración, justo antes de seleccionar Finalizar, seleccione Avanzado para modificar algunas cosas.
  • Seleccione Guardar como y seleccione un nombre propuesto por Access o especifique un nombre usted mismo.
  • Asegúrate de tomar nota del nombre que elijas. Por ejemplo, "Especificación de Importación de Datos".
  • Seleccione OK dos veces y luego cancele la importación.
  • Ahora, use la especificación de importación que creó con el código a continuación.
DoCmd.TransferText acImportDelim, "Specification of Data Import", "T1", "D:\Data.csv", False

Una de las formas más fáciles de importar CSV a Access VBA es vincular el archivo CSV a la base de datos de Access como una tabla. Luego puede trabajar en estas tablas como cualquier otra tabla de Access ordinaria.

Por ejemplo, puede crear una consulta adecuada basada en la tabla, que devolverá lo que desea.

La tabla se puede vincular manualmente o con VBA de la siguiente manera:

DoCmd.TransferText TransferType:=acLinkDelim, TableName:="tableToImport", _
    FileName:="C:\MyData.csv", HasFieldNames:=true

Luego, ejecute el siguiente código para volver a vincular las tablas CSV y realizar la importación.

Dim DB As DAO.Database
' Re-linking the CSV Table
Set DB = CurrentDb
On Error Resume Next:   DB.TableDefs.Delete "tableToImport":   On Error GoTo 0
DB.TableDefs.Refresh
DoCmd.TransferText TransferType:=acLinkDelim, TableName:="tableToImport", _
    fileName:="C:\MyData.CSV", HasFieldNames:=True
DB.TableDefs.Refresh
' Now perform the import
DB.Execute "INSERT INTO anyTable SELECT c1, c2, ... FROM tableToImport " _
   & "WHERE NOT F1 IN ('A1', 'A2', 'A3')"
DB.Close:   Set DB = Nothing

Si necesita importar algunas filas desde el principio y algunas desde el final a Access, también puede hacerlo. Una vez que haya vinculado el archivo CSV a Access, puede importar las filas requeridas con lo siguiente:

INSERT INTO anyTable SELECT c1, c2, ... FROM tableToImport WHERE NOT F1 IN ('A1', 'A2', 'A3')

En la instrucción, las filas con valores 'A1', 'A2' y 'A3' en la columna F1 se omiten y excluyen del conjunto de resultados final. Sin embargo, si su archivo CSV tiene nombres de campo, es importante tener en cuenta que si importa con HasFieldNames:=true, estos nombres se utilizarán como nombres de columna.

De lo contrario, Access asigna los nombres de las columnas por su cuenta, por ejemplo, 'F1', 'F2', 'F3', etc. Si su archivo es más pequeño, las líneas se pueden leer y escribir rápidamente.

Archivo CSV delimitado por punto y coma

Si su archivo CSV está delimitado por punto y coma, necesita una Especificación de importación. Para crear esta determinada especificación, debe intentar importar los datos manualmente una vez.

Esto le permite guardar la especificación y usarla con el código VBA más tarde. Esto se puede hacer de la siguiente manera:

  • Seleccione Datos externos > Nueva fuente de datos > Desde archivo > Archivo de texto
  • Esto hace que se abra el cuadro de diálogo Asistente de importación de texto.
  • Establezca las propiedades de importación en consecuencia; sin embargo, no cierre el asistente todavía.
  • Haga clic en el botón Avanzado en la parte inferior izquierda. Esto abre el diálogo de especificación.
  • Haga clic en Guardar como, nómbrelo correctamente como "SemiColonImportSpecification", y guarde el archivo final.
  • Ahora puede cancelar la importación ya que ahora todo lo que tenemos que hacer aquí es guardar el archivo de especificación.
  • Regrese a su código VBA inicial e incluya un parámetro más llamado especificaciones de la siguiente manera:
    DoCmd.TransferText _
    TransferType:=acImportDelim, _
    SpecificationName:="SemiColonImportSpec", _
    TableName:="TEST", _
    FileName:="C:\TEST.CSV", _
    HasFieldNames:=True
    

Exportar un archivo de texto manualmente a MS Access

También es posible importar un archivo de texto manualmente a MS Access. Esto le permite elegir sus delimitadores de texto y delimitadores de celda.

Para que esto funcione, debe elegir datos externos del menú, seleccionar el archivo que desea usar y seguir los pasos del asistente.

Una vez que las importaciones funcionen a través de los asistentes, puede guardar fácilmente una especificación de importación particular y usarla para su próximo DoCmd.TransferText. Hacer esto le permitirá tener delimitadores no estándar, como texto de comillas simples y punto y coma.

Conclusión

Importar CSV a Access VBA puede ser complicado; sin embargo, si conoce la técnica correcta, el proceso se vuelve mucho más sencillo. Este artículo describe los métodos exactos y los detalles sobre cómo hacerlo correctamente.

Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub