Importar base datos de Excel en Access desde una macro de Excel

Tengo la siguiente macro que importa una base de datos de Excel en Access.

Tengo 2 problemas:

1. Actualizo la base de datos en Excel y guardo cambios. Si vuelvo a ejecutar la macro con la tabla de Access previamente abierta, la tabla de Access no actualiza los últimos datos que se ingresaron en la base de datos de Excel.

2. Si la base de datos de Excel tiene más de 1 hoja (por ejemplo "Costos", "Ingresos" y "Ventas") y yo quiero importar los datos de la hoja que se llama "Ventas, ¿cómo debo modificar la instrucción DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, NomTablaBanca, Archivo, True?

Sub ImportarAccess()

Dim NomTablaBanca As String, Ruta As String, Insumo As String, Archivo As String

Ruta = "D:\Documents\Pipe\"
Insumo = "Archivo.xlsb"

NomTablaBanca = "Tabla1"
Archivo = Ruta & Insumo
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, NomTablaBanca, Archivo, True

End Sub

2 respuestas

Respuesta

Para indicar el nombre de la hoja a importar, tienes el argumento Range, que según la ayuda (https://msdn.microsoft.com/es-es/VBA/Access-VBA/articles/docmd-transferspreadsheet-method-access ):

Range : Expresión de cadena que es un rango de celdas válido o el nombre de un rango en la hoja de cálculo. Este argumento sólo se aplica a la importación. Deje en blanco este argumento para importar la hoja de cálculo completa. Al exportar a una hoja de cálculo, debe dejar en blanco este argumento. Si especifica un rango, se producirá un error en la exportación.

Con lo que tu linea de código quedaría:

DoCmd. TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, NomTablaBanca, Archivo, True,"Ventas"

Si tienes al tabla abierta al ejecutar el código, es normal que no veas lso cambios hasta que la actualices. ¿Probaste a cerrar la tabla y abrirla o a pulsar F5? Si no te importara, te tendría que dar algún error...

Un saludo.


Hola. 

La instrucción que me dices NO funciona cuando agrego al final el nombre de la hoja que quiero cargar: 

DoCmd. TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, NomTablaBanca, Archivo, True,"Ventas"

En cuanto a actualizar la tabla, lo que se busca es que la macro actualice de una manera más autónoma la tabla de Access y no depender que el usuario esté actualizando la tabla.

Muchas gracias.

Ponle un signo de exclamación al final del nombre de la hoja:

DoCmd. TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, NomTablaBanca, Archivo, True,"Ventas!"

También tienes otras opciones, con códigos más elaborados, que te ofrecen otras opciones, y puedes ver es ente ejemplo de Neckkito:

https://dl.dropboxusercontent.com/u/7400954/WebAccess/Pdf/EjemplosEspeciales/ImportandoConExcel.pdf 

Respecto a lo de actualizar la tabla, si la macro la llamas desde un formulario, puedes añadirle al código (de ese procedimiento o desde el que lo llames) un Me. Requery para que se actualice automáticamente.

Hola. Creo que es pertinente ensayar las respuestas antes de enviarlas.

Tampoco funcionó.

Chao.

Pues algo harás mal porque mi respuesta está suficientemente probada, y además, en esta misma página: ¿Cómo importar datos de un libro excel desde access con código vba?

Y con los códigos del enlace que te puse, también tienes formas de importar la hoja que quieras.

¡Gracias! 

No me funcionó. 

De todos modos gracias por la voluntad

Pues no sé qué habrás hecho, pero funcionar, funciona: http://filebig.net/files/qAQcvhfunJ 

Respuesta

Independientemente de la respuesta anterior, que es la correcta, ¿has probado simplemente a vincular tablas? Así, cualquier cambio que hagas en la hoja de Excel se refleja en la tabla de Access y te evitas el código.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas