CONECTAR BASE DE DATOS DE ACCESS (ACCDB) CON EXCEL UTILIZANDO HERRAMIENTA OLEBD

En nuestros trabajos muchas veces dependemos de diferentes tecnologías para obtener un determinado resultado, Excel nos es la única herramienta con la que tenemos que trabajar, un ejemplo es el uso de SQL o de Access a la hora de extraer, tratar y mostrar la información.

De hecho, en el ejercicio que voy a exponer como ejemplo, trataré de explicar como se puede vincular una tabla de Access a Excel y que, mediante una macro, la podamos actualizar en nuestra hoja desde los datos que tenemos en Access.

Vamos allá 🙂

Vamos a suponer que tenemos en una tabla de Access los datos por poblaciones del número de hombre y mujeres que hay en España. (los datos que muestro los he tomado del INE, están publicados y disponibles en su web). Vamos a suponer que esos datos se actualizan cado año de forma automática y dado que tenemos una aplicación que hemos desarrollado en Excel y que necesita disponer de los datos que se recogen en esa base de datos de Access (ACCDB), resultaría conveniente que pulsando un solo botón, nuestra información se actualizase al momento, sin necesidad de importar o copiar y pegar la información de forma manual.

Para ello he creado una base de datos a la que llamaré «DATABASE» y que recoge la tabla con la información de las provincias, de esta forma:

CONECTAR ACCESS CON EXCEL MEDIANTE OLEDB

Una vez que tenemos la base de datos bien definida y completa, procedemos a abrir la hoja Excel donde vamos a escribir la macro que nos importará y actualizará la información desde Access. Antes de entrar en el programador vamos a colocar un botón para ejecutar la macro. Así:

CONECTAR ACCESS CON EXCEL MEDIANTE OLEDB_1

Como siempre, debéis ir a la pestaña Programador > Insertar> Controles de formulario y pulsáis en «Botón (Control de formulario)». Aprovechando que estoy en la hoja y dado que la macro lo que va a traer es solo la información y no el formato, con la herramienta de relleno coloreo de gris y pongo en formato de letra «negrita» el cabecero de la tabla.

Ahora vamos a escribir la macro, para ello abrimos el programador de VBA y creamos un módulo nuevo:

CONECTAR ACCESS CON EXCEL MEDIANTE OLEDB_2

Y entonces escribimos el siguiente código:

Sub actualizar_datos()
'ACTUALIZAMOS BASE DE DATOS
Dim path_Bd As String
Dim cnn As New ADODB.Connection
Dim recSet As New ADODB.Recordset
Dim strDB, strSQL As String
Dim strTabla As String
Dim lngCampos As Long
Dim i As Long
Dim bBien As Boolean
On Error GoTo ControlError
bBien = True
'CONECTAMOS CON LA BASE DE DATOS DE ACCESS Y ABRIMOS CONSULTA
path_Bd = "G:\PRUEBAS ACCESS\CONEXION ACCESS Y EXCEL. OLEBD\DATABASE.accdb"
cnn.Provider = "Microsoft.ACE.OLEDB.12.0"
cnn.Properties("Data Source") = path_Bd
'EN CASO QUE LA BASE DE DATOS TENGA UNA CONTRASEÑA, SE DEBE PONER AQUÍ
cnn.Properties("Jet OLEDB:Database Password") = ""
cnn.Open
strTabla = "BASE"
strSQL = "SELECT * FROM " & strTabla & " "
recSet.Open strSQL, cnn
'COPIAR LOS DATOS A LA HOJA
Worksheets("Hoja1").Select
'LIPIAMOS DATOS DE EXCEL ANTES DE ACTUALIZAR
limpiardatos = Sheets("Hoja1").Range("A" & Rows.Count).End(xlUp).Row
Sheets("Hoja1").Range("A2:z" & limpiardatos).ClearContents
'GRABAMOS NUEVA BASE DE DATOS DE ACCESS
Sheets("Hoja1").Cells(2, 1).CopyFromRecordset recSet
'COPIAMOS RÓTULOS
lngCampos = recSet.Fields.Count
For i = 0 To lngCampos - 1
Sheets("Hoja1").Cells(1, i + 1).Value = recSet.Fields(i).Name
Next
'DESCONECTAMOS
recSet.Close: Set recSet = Nothing
cnn.Close: Set cnn = Nothing
Sheets("Hoja1").Select
MsgBox "LA BASE DE DATOS HA SIDO ACTUALIZADA."
Salir:
On Error Resume Next
If Not bBien Then
MsgBox "NO SE HA PODIDO ACTUALIZAR LA BASE DE DATOS, INTÉNTALO MÁS TARDE."
End If
recSet.Close: Set recSet = Nothing
cnn.Close: Set cnn = Nothing
Exit Sub
ControlError:
bBien = False
Resume Salir
End Sub

En cada uno de los pasos os he ido comentando (en verde) qué es lo que hace la macro en cada momento. Antes de asignar la macro al botón de la hoja, debemos hacer los siguientes cambios en las referencias del proyecto. Como muestro en la siguiente imagen, pulsamos en Herramientas y luego en Referencias:

CONECTAR ACCESS CON EXCEL MEDIANTE OLEDB_3

Una vez que pulsamos en Referencias, se nos abre un cuadro de opciones y debemos marcar las mismas que os muestro, de lo contrario, la macro no funcionará:

CONECTAR ACCESS CON EXCEL MEDIANTE OLEDB_4

Una vez que tenemos hemos hecho esto la macro ya está totalmente operativa y la hoja funcionará perfectamente.
Un dato importante, de la macro que os acabo de mostrar es la ruta de acceso a la base de datos, veamos que es lo que aparece:

'CONECTAMOS CON LA BASE DE DATOS DE ACCESS Y ABRIMOS CONSULTA
path_Bd = "G:\PRUEBAS ACCESS\CONEXION ACCESS Y EXCEL. OLEBD\DATABASE.accdb"
cnn.Provider = "Microsoft.ACE.OLEDB.12.0"
cnn.Properties("Data Source") = path_Bd
cnn.Properties("Jet OLEDB:Database Password") = ""
cnn.Open
strTabla = "BASE"
strSQL = "SELECT * FROM " & strTabla & " "
recSet.Open strSQL, cnn

La ruta que aparece en rojo la debéis modificar antes de probar la macro, en mi PC dispongo de unidad G (como disco externo), y el ejemplo lo tengo en una carpeta llamada PRUEBAS ACCESS y a su vez en otra carpeta denominada CONEXIÓN ACCESS Y EXCEL, dentro está la base de datos «DATABASE.accdb»

Es importante que lo recordéis, debéis modificar la ruta y especificando donde se encuentra la base de datos de Access en vuestro equipo, de lo contrario, no funcionará.

Tan solo queda asignar la macro al botón y listo, ya tenéis el proceso de actualización de datos totalmente preparado. Así es como funcionaría:

CONECTAR ACCESS CON EXCEL MEDIANTE OLEDB_5

Los ejemplos de este ejercicio están basados en Excel 2010 y Access 2010, en versiones anteriores puede dar problemas, para Access 2003 (archivos .mdb) abría que modificar la macro donde pone:

cnn.Provider = «Microsoft.ACE.OLEDB.12.0» se debe poner: cnn.Provider = «Microsoft.Jet.OLEDB.4.0»

Os dejo el archivo de ejemplo, lo subo con un archivo .RAR con la carpeta entera y desde Google Drive dada la extensión de la Access que no está permitida en WordPress.

Descarga el archivo pulsando enCONECTAR BASE DATOS CON OLEDB

 

85 pensamientos en “CONECTAR BASE DE DATOS DE ACCESS (ACCDB) CON EXCEL UTILIZANDO HERRAMIENTA OLEBD

    • Hola leonbrave :

      Me alegro te funcionase correctamente la conexión con las tablas. Supongo que tu pregunta se refiere a si en vez de ser una tabla, se puede conectar y actualizar una consulta de Access. La respuesta es sí y además muy sencillo, si utilizas el código del ejemplo del blog, que a continuación reproduzco, tan solo tienes que sustituir en la parte «strTabla = «BASE» que es el nombre con el que denominaba la tabla de access por el nombre de la consulta. Imagina que a la consulta le llamas, «CONSOLIDADO», pues quedaría así:

      path_Bd = «G:\PRUEBAS ACCESS\CONEXION ACCESS Y EXCEL. OLEBD\DATABASE.accdb»
      cnn.Provider = «Microsoft.ACE.OLEDB.12.0»
      cnn.Properties(«Data Source») = path_Bd
      cnn.Properties(«Jet OLEDB:Database Password») = «»
      cnn.Open
      strTabla = «CONSOLIDADO»
      strSQL = «SELECT * FROM » & strTabla & » »
      recSet.Open strSQL, cnn

      Espero haberte ayudado.

      Un saludo y gracias por participar.

      Me gusta

  1. Pingback: VINCULAR BASE DE DATOS ENTRE VARIAS HOJAS DE EXCEL | Excel Signum

  2. Hola José Luis,

    Para poder analizar mejor tu consulta puedes enviar un ejemplo visual en una hoja Excel explicando cómo tienes la información y que quieres que se muestre en el listbox a excelsignum@yahoo.es De todas formas, lo ideal es que el listbox cargo los datos desde una hoja en la que previamente has importado los datos con la herramienta. Pero necesito ver la info que tienes. Saludos

    Me gusta

  3. Buenas noches, tengo una gran inquietud de la cual quisiera que me ayudaran por favor… Tengo un excel en la cual muestra las capacitaciones de personas (identificadas con un RUT) las cuales las realizan en un mes determinado y queda registrado en la tabla de datos… Ocurre un problema, la duración de una capacitación es de 12 meses y al mes 12 se debe volver a capacitar al personal, hay casos que se deben identificar cuando las capacitaciones se realizan antes de los 12 meses, por favor alguien me ayude, no entiendo mucho de programación y es un registro enorme de datos… Gracias

    Me gusta

  4. Buenas noches. Quisiera recobir su apoyo en lo siguiente: manejo una hoja de excel en la que requiero que de la celdas h12 hasta las celdas k62 no puedan ser modificadas por ningun usuario. Las restantes si, ya que semanal se introducen datos en la que las celdas que no se requieren que modifiquen arrojan resultados. ( aclaro que estas celdas que menciono que se requieren ser bloqueadas tienen formulas para que arrojen resultados) espero pronto su reapuesta, gracias

    Me gusta

    • Hola Alejandro,

      Puedes realizar lo que indicar accediendo al formato de la hoja seleccionarla toda y con botón derecho desproteger todas las celdas. Luego seleccionas el rango que quieres proteger y haces lo mismo, botón derecho y marcar «proteger».

      Una vez que hayas realizado estos pasos, debes ir a la cinta de opciones en la pestaña «revisar» y pulsar en proteger hoja.

      De esta forma solo se podrán modificar las celdas que previamente has desprotegido.

      Si vas a trabajar con macros, deberás tenerlo en cuenta, dado que hay que considerar la protección de la hoja. Si solo son fórmulas, no hay problema, así puedes trabajar perfectamente. Si quieres enviar el archivo puedes hacerlo a excelsignum@yahoo.es

      Saludos.

      Me gusta

      • Buenos dias mi estimado.

        Gracias por su respuesta, pero efectivamente si manejo macro y la opcion que me dio funciona pero al accionar la funcion del macro me arroja un error, agradeceria mucho si me ayudara con esto. Gracias

        Me gusta

  5. Hola Alejandro, entonces te comparto el siguiente post del blog donde se trata precisamente de eso,

    https://excelsignum.wordpress.com/2013/07/21/ejecutar-macros-en-libros-protegidos-con-contrasena/

    En este ejemplo se trata de proteger el libro, para el ejemplo de proteger la hoja, solo tienes que cambiar en la macro: ActiveWorkbook. por ActiveSheet.

    Es decir, sería esto:

    Sub Macro_hoja_protegida()
    ‘Desprotegemos el libro introduciendo la contraseña.
    ActiveSheet.Unprotect «contraseña»

    ‘ Pon aquí la macro de tu proyecto

    ‘una vez que acabe el proceso volvemos a seleccionar la hoja.
    Sheets(«Hoja1»).Select
    ‘volvemos a aplicar la contraseña.
    ActiveSheet.Protect «contraseña»
    End Sub

    Échale un vistazo al post.

    Saludos

    Me gusta

  6. Hola, Buenos dias, tengo una situacion, la cual no se la mejor forma de hacerlo, es la siguiente:
    En una intranet hay cientos de computadoras conectadas, cada una de ellas tiene un archivo .mdb, cada archivo tiene varias tablas (la que me interesa es la primera de ellas que se llama «Error», en una carpeta logre juntar cada archivo .mdb, ahora bien lo que quiero hacer es conectar cada una de las tablas «Error» a un archivo denominado «Reporte» en Excel en el cual tengo un formato, lo que quiero es hacer una conexion de cada tabla hacia excel y que al modificar un dato en excel se modifique en el archivo .mdb y viceversa, Gracias de antemano.

    Me gusta

  7. Hola Irving,
     
    Leyendo lo que comentas, no me queda claro cúal es la disposición de los datos en el archivo Excel denominado «Reporte». Supongo que en cada pestaña iría cada una de las tablas «Error». De ser así, puedes utilizar la macro del post para importar cada una de las tablas mdb al archivo Excel.
     
    Para realizar el otro trabajo, es decir modificar cada uno de esos archivos y grabar los datos en Access de nuevo, tendrías que utilizar una macro que conecte Excel con Access y exporte las tablas de nuevo con los cambios realizados. Sobre este punto no tengo desarrollos realizados, pero sí te puedo orientar a otro blog donde se hace un buen e interesante planteamiento, se trata de JLD Excel en Castellano de Jorge L. Dunkelman, y en concreto el post de referencia sería este: http://jldexcelsp.blogspot.com.es/2009/06/transferir-datos-de-excel-access_11.html
     
    Otra alternativa, puede ser, realizar una consulta con todos los archivos Error, y disponer los datos de forma que los puedas importar a Excel en una sola hoja «reporte» (con la macro de mi ejemplo puedes importar consultas). Una vez que lo tengas en Excel, y con una estructura adecuada, realizar una macro que pueda leer los datos de la consulta y trasladarlos a cada mdb.
     
    Sería necesario, ver la estructura de la información, qué consulta en Access puede dejar la información mejor para posteriormente modificarla en excel e importarla …
     
    También se podría valorar realizar todo en Access, vinculando tablas y consultas que se actualicen automáticamente.
     
    Es un trabajo que requiere un análisis importante y tiempo para contrastar datos 🙂

    Me gusta

  8. Hola, gracias por el tutorial, sin embargo no me abre la base de datos, tengo todos los componentes que indicas tikeados, sin embargo aún así no lo hace. Al depurar el código se cae en la línea cnn.Open y automáticamente envía el mensaje «no se ha podido actualizar…..» Puedes ayudarme por favor??? Desde ya muchas gracias,

    Me gusta

  9. Hola César:

    Has comprobado lo siguiente?
    – La ruta al archivo está correctamente escrita?
    – El archivo tiene clave? si la tiene debes especificarla en la macro.
    – El nombre de la tabla es la misma que está en la macro?
    – Has codificado las referencias en el archivo de Excel en caso de estar utilizando uno diferente al de la descarga?
    – La base de datos es mdb o accbd. si es mdb debes utilizar cnn.Provider = “Microsoft.Jet.OLEDB.4.0

    Verifica esto, si ves que sigue el error, y para descartar problemas, puedes enviarme la base de datos (una muestra o ejemplo) en access y el excel con la macro que estás implementando.

    excelsignum@yahoo.es

    Saludos 🙂

    Me gusta

    • Muchas gracias por responder tan pronto.

      Bueno te comento que lo que hice en realidad fue tomar tu ejemplo, copiarlo y ejecutarlo tal cual (archivo excel y access), solo cambié la ruta del archivo donde reside mi db Access. Incluso también la guardé con la antigua extensión MDB cambiando en el código el objeto OLE pero aún así no abre.

      Muchas gracias espero que puedas sacarme de esta!!!

      Me gusta

      • Hola, necesitaría ver la hoja excel, doy por supuesto que el access es una tabla o consulta en accdb. Qué versión tienes de Excel?. En la hoja no hace falta que tenga datos, tan solo la macro. Lo ideal seria contar con e access y el Excel para verificar que todo funciona.

        Trato de responderte por la noche!

        Saludos.

        Me gusta

    • Amigo mío, muchísimas gracias por el tiempo y el apoyo entregado, todo salió de maravillas, creo que tendré que volver a lo mío que es el desarrollo….hace ya más de 10 años que no programaba….así que de cabeza nuevamente a los manuales para volver a ocupar mi lugar…

      Un fuerte abrazo!!!

      Me gusta

      • Hola César, me alegro mucho que todo funcione correctamente!! Pues claro que sí, siempre está bien volver a programar, aunque pasen años la base siempre está ahí. Un poco de teoría y práctica y estarás 100%

        Un abrazo y ya sabes, si tienes alguna consulta, estoy a tu disposición 🙂

        Me gusta

  10. Hola buen dia, gracias por la herramienta tan util que has dejado por aca. Ahora tengo una pregunta, como puedo hacer si lo unico que quiero es una macro para que descargue una tabla de access a excel? No ocupo actualizar solo descargar para hacer reportes. Gracias

    Me gusta

  11. Hola Jona,

    Pues la respuesta es exactamente el código del ejemplo, lo que hace es descargar desde Access una tabla o una consulta y llevarla a excel, a este procedimiento lo denomina actualizar, que es lo mismo que descargar. Si te da un error, puede ser debido a varios motivos, por experiencia puede ser lo comentado en una de las respuestas a este hilo:

    – La ruta al archivo está correctamente escrita?
    – El archivo tiene clave? si la tiene debes especificarla en la macro.
    – El nombre de la tabla es la misma que está en la macro?
    – Has codificado las referencias en el archivo de Excel en caso de estar utilizando uno diferente al de la descarga?
    – La base de datos es mdb o accbd. si es mdb debes utilizar cnn.Provider = “Microsoft.Jet.OLEDB.4.0

    Y por último, cómo se llama la tabla o consulta?, existen algunos caracteres que pueden provocar errores.SI puedes y quieres que lo vea detenidamente, puedes enviar un correo con los datos de ejemplo (access y el excel con la macro) al siguiente correo: excelsignum@yahoo.es

    Saludos.

    Me gusta

  12. Pingback: CONECTAR BASE DE DATOS DE EXCEL UTILIZANDO HERRAMIENTA OLEBD Y SQL | Excel Signum

  13. Hola gracias por el tiempo dedicado.
    No logro hacer la conexión, primeramente intento modificar los parametros en el excel de ejemplo y me da simplemente el error de que intente más tarde, como si todo el codigo estuviese OK menos el nombre de la tabla, o la ubicación de la BD..
    Cuando intento hacer el modulo desde 0, en las referencias no encuentro: Microsoft Forms …., ni Microsoft ….recordset 2.8, Y no tengo idea de porqué no están ahí, sin embaro reviso las referencias del fichero de ejemplo y ahí estan!! jaja no entiendo nada..
    Espero me ayuden sludos..

    Me gusta

  14. Hola Dariel,

    ¿Cuál es el nombre de la tabla que estás intentando vincular?. Por otra parte, que versión de Access estás utilizando, es una tabla mdb o accdb?. Puedes enviar una muestra en una carpeta con los dos archivos y verifico si existe algún problema. Puede que no algunas referencias no las tengas instaladas, Forms no es relevante, pero el recorset sí.

    Seguro que es un problema con el nombre de la base de datos. Envía el ejemplo que te está causando el problema, e indica versión de Excel y de access.

    mail: excelsignum@yahoo.es

    Saludos.

    Me gusta

  15. Gracias Segu por la pronta respuesta, revisé y logro hacerlo quitándole la contraseña a la base de datos, aunque la había configurado bien cnn.Properties(«Jet OLEDB:Database Password») = «***********» con la contraseña que tenía pero no se porqué no funciona… no se pueda haber algún error en el código?? saludos!

    Me gusta

    • Edito el mensaje. El problema que puedes estar teniendo es el siguiente, se debe al cifrado de la contraseña: debes hacer las siguientes modificaciones en Access, entra en OPCIONES, luego vas a CONFIGURACIÓN DE CLIENTE y en donde pone METODO DE CIFRADO, debes elegir USAR CIFRADO HEREDADO. Así funcionará casi con seguridad.

      Prueba y me dices.

      Saludos.

      Me gusta

  16. Buen dia, la verdad necesito de tu ayuda, espero ya no sea muy tarde, es que es sobre la macro que hiciste para realizar la actualizacion de datos en acces con excel, la verdad yo quisiera saber como hago para modificar esa base de datos desde excel, yo tengo el codigo para conusltar la informacion pero quiero saber como hago para despues de que haga la consulta modificar cualquier dato y volverle a dar exportar y que quede actualizada la informacion en acces.

    De antemano muchisimas gracias.

    Me gusta

  17. Hola David,

    Todavía no he realizado ninguna entrada relacionada con la modificación de Access desde Excel, sin embargo (tomo nota, una de las próximas entradas será esa), te adjunto un artículo de microsoft donde tienes el ejemplo de un código en DAO:

    https://support.microsoft.com/es-es/kb/151511

    Echa un vistazo a ver que te parece y si puedes implementarla. En cualquier caso, en breve realizaré una entrada relacionada con tu pregunta.

    Saludos.

    Me gusta

  18. Pingback: EXPORTAR DATOS DE EXCEL A ACCESS MEDIANTE ADO | Excel Signum

  19. Buen día, quisiera realizarte una consulta;
    Quisiera extraer información de una tabla en access seleccionando una opción mediante un CUADRO COMBINADO desde excell.
    Las opciones que tengo en el cuadro combinado son: despachado, anulado, pendiente, quisiera que al momento de seleccionar uno de ellos me muestre en excel toda la información con respecto a ese estado.

    Muchas Gracias.

    Me gusta

    • Hola William,

      Siguiendo el ejemplo que he propuesto arriba, debes modificar
      strTabla = "BASE"
      strSQL = "SELECT * FROM " & strTabla & " "

      que está en el código, por esto otro:

      VCombo = Sheets(1).ComboBox1.Value
      strSQL = "SELECT BASE.*" & _
      "FROM Base " & _
      "WHERE (BASE.CPRO)=" & "'" & VCombo & "'"

      Donde VCombo captura el valor del combobox1 en la hoja 1, si es necesario cambia los valores.
      En la base de datos de access, consulta si el campo CPRO tiene algún calor incluido en el comobobox. Puede modificar la base de datos del ejemplo, y en el campo provincia incluir algunos valores como despachado, anulado, pendiente y te devolverá los registros filtrados.

      Saludos.

      Me gusta

  20. Hola no sé si el sitio, pero necesito ayuda con esta macro.

    Cuando la ejecuto funciona correctamente, pero luego al actualizar datos me pide user y contraseña, pero la BBDD no tiene.

    Muchas gracias.

    Me gusta

  21. Perdona, la macro que tengo es esta, la otra tenía una prueba.

    Sub Macro1()

    ‘ Macro1 Macro

    With ActiveWorkbook.Connections(«Datos6»).OLEDBConnection

    .BackgroundQuery = True
    .CommandType = xlCmdTableCollection
    .Connection = «OLEDB;Provider=Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=C:\Users\Notebook01\Google Drive\Varios\Analista automatico\Clientes\Primer Impacto\Móvil\Datos_6.MDB;Mode=Share Deny Write;Extended Properties=;Jet OLEDB:Database Password=»»;Jet OLEDB:System database=;Jet OLEDB:Registry Path=;Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password=;Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don’t Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False;Jet OLEDB:Bypass UserInfo Validation=False;Jet OLEDB:Limited DB Caching=False;Jet OLEDB:Bypass ChoiceField Validation=False»
    .RefreshOnFileOpen = False
    .SavePassword = False
    .SourceConnectionFile = «»
    .SourceDataFile = _
    «C:\Users\Notebook01\Google Drive\Varios\Analista automatico\Clientes\Primer Impacto\Móvil\Datos_6.MDB»
    .ServerCredentialsMethod = xlCredentialsMethodIntegrated
    .AlwaysUseConnectionFile = False
    .CommandType = xlCmdTableCollection
    .CommandText = «CABECERA,CARGOS_FACTURA,CARGOS_PREFACTURA,CENTRO_COSTE,CLIENTE,CUOTAS,DESCUENTOS_FACTURA,DESCUENTOS_PREFACTURA,DESCUENTOS_TELEFONO,DETALLE,FACTURA,PREFACTURA,RESUMEN,SERVICIO,SUB_CCOSTE,TELEFONO,TOTALES_CLIENTE,TOTALES_SERVICIO,TOTALES_SOPORTE,VARIOS»
    End With
    With ActiveWorkbook.Connections(«Datos6»)
    .Name = «Datos6»
    .Description = «»
    End With


    End Sub

    Me gusta

  22. Hola Kiko, tal y como te comentaba, la mejor solución sería adaptar la macro que has enviado a la que propongo en este artículo. En el caso de realizar la conexión con access desde excel y por la cinta de opciones utilizando el grabador, lo mejor es que crees la conexión (o varias conexiones) y realizar precisamente ahí la macro, es decir, ejecutar un refresh de la conexión.

    Para analizar cual puede ser problema que afecta a tu proyecto necesitaría realizar pruebas sobre la base de datos (o similar). Piensa en realizar la adaptación, merece la pena.

    Saludos.

    Me gusta

  23. Hola, tengo 2 preguntas: 1.- ¿Cómo abro directamente un formulario de Access desde una macro en Excel? y 2.- ¿Como actualizo un campo en una tabla desde una celda de Excel usando la llave de la tabla? Gracias y hasta luego.

    Me gusta

    • Hola Francisco:
      Respondo a tus preguntas:
      Respuesta a la pregunta1:

      Sub Abrir_form()
      Dim cn As Object
      Dim str As String
      On Error Resume Next
      Set cn = GetObject(, "Access.Application")
      If cn Is Nothing Then
      Set cn = GetObject("", "Access.Application")
      'indicar la ruta a la base de datos
      cn.OpenCurrentDatabase "C:\Ruta a la base de datos"
      'indicar la base base de datos
      str = cn.CurrentDb.Properties("nombre de la base de datos")
      cn.DoCmd.Close cnForm, str
      'indicar el nombre del formulario
      cn.DoCmd.OpenForm "nombre del formulario"
      cn.UserControl = True
      Set cn = Nothing
      End If
      AppActivate "Microsoft Access"
      End Sub

      Solo debes indicar la ruta en la que se encuentra tu base de datos, el nombre de la base de datos y el nombre del formulario que quieres abrir.

      Pregunta2:

      Sub UpdateAccess()
      Dim conAccess As ADODB.Connection
      Dim Origen As String, Destino As String
      Dim conExcel As String, obSQL As String
      'especificar nombre de tablas en access y excel
      Destino = "[nombre base de datos access]"
      Origen = "[hoja de excel con los datos a introducir, ejemplo: Hoja1$]"
      conExcel = "[Excel 8.0;HDR=Yes;DATABASE=C:\cadena de conexion excel.xls]." & Origen
      'intruccion sqlpara actualizar dato
      obSQL = "INSERT INTO " & Destino & " SELECT * FROM " & conExcel
      Set conAccess = New ADODB.Connection
      With conAccess
      .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=C:\cadena de conexion archivo access.accdb;"
      .Open
      .Execute obSQL
      .Close
      End With
      End Sub

      Al igual que la macro anterior, solo debes indicar el nombre de la base de datos de Access, la hoja (o nombre de la hoja, donde están los datos a actualizar en Excel), la ruta al archivo de Access y al de Excel.

      Puede que sea de tu interés esta entrada:
      https://excelsignum.com/2016/03/31/exportar-datos-de-excel-a-access-mediante-ado/

      Por cierto, acuérdate de habilitar las referencias en el editor de VBA!

      Saludos!

      Me gusta

      • Hola, muchas gracias por tu respuesta, no tengo experiencia y he intentado hacerlo, los resultados son:
        Para la opción 1 solo me abre la aplicación de Access pero no abre la base de datos indicada y mucho menos el formulario, no se que me faltará:
        Sub Abrir_Form()
        Formato Macro
        Dim cn As Object
        Dim str As String
        On Error Resume Next
        Set cn = GetObject(, "Access.Application")
        If cn Is Nothing Then
        Set cn = GetObject("", "Access.Application")
        'indicar la ruta a la base de datos
        cn.OpenCurrentDatabase "C:\Pruebas\"
        'indicar la base base de datos
        str = cn.CurrentDb.Properties("Pruebas.accdb")
        cn.DoCmd.Close cnForm, str
        'indicar el nombre del formulario
        cn.DoCmd.OpenForm "Maestro"
        cn.UserControl = True
        Set cn = Nothing
        End If
        End Sub

        En el segundo caso Al llegar a la sentencia .Open me envía un error ‘-2147467259 (800004005)’ en tiempo de ejecución: Error de Automatización.

        Puede ocurrir que no tiene toda la información sobre la base de datos y la tabla a actualizar:
        Sub UpdateAccess()
        Dim Origen As String, Destino As String
        Dim conExcel As String, obSQL As String
        Dim conAccess As ADODB.Connection
        'especificar nombre de tablas en access y excel
        ' cómo le indico que es la tabla maestro de la base datos Pruebas.accdb?
        Destino = "[Maestro]"
        Origen = "[Proceso Hoja2$]"
        conExcel = "[Excel 8.0;HDR=Yes;DATABASE=C:\cadena de conexion excel.xls]." & Origen
        'intruccion sqlpara actualizar dato
        obSQL = "INSERT INTO " & Destino & " SELECT * FROM " & conExcel
        Set conAccess = New ADODB.Connection
        With conAccess
        .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=C:\cadena de conexion archivo access.accdb;"
        .Open
        .Execute obSQL
        .Close
        End With
        End Sub

        Gracias por tu ayuda.

        Me gusta

        • Hola Francisco:

          Respecto a las consultas que me indicas, la primera macro debería ser así:

          En la ruta se indica la extensión del archivo, .accdb esto lo puedes encontrar haciendo clic con el botón derecho encima de tu archivo de Access y en la pestaña SEGURIDAD copias lo que detalla el nombre de objeto.

          La base de datos sin la extensión «.accdb»

          Los nombres deben ser iguales a los que tiene la base de datos de Access (respetando si están en mayúsculas o minúsculas).

          Así debería de funcionarte:

          Sub Abrir_Form()
          Dim cn As Object
          Dim str As String
          On Error Resume Next
          Set cn = GetObject(, "Access.Application")
          If cn Is Nothing Then
          Set cn = GetObject("", "Access.Application")
          'indicar la ruta a la base de datos
          cn.OpenCurrentDatabase "C:\Pruebas.accdb"
          'indicar la base base de datos
          str = cn.CurrentDb.Properties("Pruebas")
          cn.DoCmd.Close cnForm, str
          'indicar el nombre del formulario
          cn.DoCmd.OpenForm "Maestro"
          cn.UserControl = True
          Set cn = Nothing
          End If
          End Sub

          Respecto a la segunda macro

          Te falta la cadena de conexión a la base de datos de Access: C:\Pruebas.accdb (verifica que esta es la conexión)

          Y al archivo de Excel: C:\cadena de conexion excel.xls

          Si es el mismo archivo de donde tienes el formulario, el nombre de la base de datos es «Pruebas» y no «Maestro»

          Verifica que has introducido las referencias en el editor VBA

          Sub UpdateAccess()
          Dim Origen As String, Destino As String
          Dim conExcel As String, obSQL As String
          Dim conAccess As ADODB.Connection
          ‘especificar nombre de tablas en access y excel
          ‘ cómo le indico que es la tabla maestro de la base datos Pruebas.accdb?
          Destino = "[Maestro]"
          Origen = "[Proceso Hoja2$]"
          conExcel = “[Excel 8.0;HDR=Yes;DATABASE=C:\cadena de conexion excel.xls].” & Origen
          ‘intruccion sqlpara actualizar dato
          obSQL = “INSERT INTO ” & Destino & ” SELECT * FROM ” & conExcel
          Set conAccess = New ADODB.Connection
          With conAccess
          .ConnectionString = “Provider=Microsoft.ACE.OLEDB.12.0;” & “Data Source=C:\Pruebas.accdb;”
          .Open
          .Execute obSQL
          .Close
          End With
          End Sub

          De todas formas, a raíz de tu consulta he incluido en la web un ejemplo de cómo hacerlo, puedes bajártelo y comparar. Aquí ya he incluido las referencias en el editor VBA

          https://excelsignum.com/2016/07/08/anadir-registros-en-access-desde-excel-con-vba/

          Me gusta

          • Hola Segu,

            Funcionaron muy bien ¡GRACIAS!

            Una pregunta adicional: ¿Al abrir el formulario es posible que solo se presente la pantalla emergente sin la base de datos?

            Hasta luego.

            Me gusta

            • Hola Francisco,

              Respecto a la pregunta que realizas, existen algunos métodos para ocultar objetos de Access mediante macros, aunque personalmente no lo recomiendo, puedes correr el riesgo (altamente probable) de cargarte una base de datos. Mi consejo es que entres en la base de datos de access y desde ahí ocultes el panel de navegación directamente: Archivo > Opciones > Base de datos Actual > Navegación y desmarcas «Mostrar Panel de Navegación.

              De esta forma te aseguras que la información está oculta a los demás usuarios.

              Me gusta

  24. Hola buenas tardes.

    Quiero realizar una busqueda en una tabla de Access con un formulario de Excel, este es el código que estoy usando pero no puedo hacerlo.

    Private Sub Buscar_Click()

    Set cnn = New ADODB.Connection

    With cnn
    .Provider = «microsoft.jet.oledb.4.0»
    .ConnectionString = «data source=\\servermad\Sistemas\Gabriel\Base de datos21.mdb»
    .Open
    End With

    Set rst = New ADODB.Recordset

    Sql = «select * from Directorio»

    With rst
    .CursorLocation = adUseClient
    .CursorType = adOpenKeyset
    .LockType = adLockOptimistic
    ‘.Open Sql, cnn, , , adCmdText
    ‘.Open
    End With

    Dim sSQLQuery As String

    sSQLQuery = «SELECT *» & vbCr
    sSQLQuery = sSQLQuery & «FROM Servicio «» & vbcr»
    sSQLQuery = sSQLQuery & «WHERE Folio = ‘» & Text_folioILE.Text & «‘» & vbCr

    Dim adoRegistros As New ADODB.Recordset

    adoRegistros.Open sFolio, adoConexion, adOpenStatic, adLockReadOnly

    If adoRegistros.BOF = adoRegistros.EOF And adoRegistros.EOF = False Then

    Text_folioILE.Text = adoconsulta!Folio
    Text_NombILEBus.Text = adoconsulta!Nombre

    End If

    adoConexion.Close
    Set adoConexion = Nothing

    End Sub

    Espero me puedas ayudar

    Me gusta

    • Hola Gabriel,

      Cuál es el error que te muestra?, Has probado a realizar el ejercicio con la macro que pongo en este ejemplo. Aquí importa la tabla completa, solo tendrías que modificar la consulta sql para que te trajese los datos según consulta.

      Intento verificar si suceda algo con el código que me indicas, pero ya llevo unos años que no toco archivos mdb, casi todo lo hago con accdb.

      Esa búsqueda la puedes hacer perfectamente con el código del ejemplo, si me envías un ejemplo con los dos archivos (el de access y el de excel) podría analizar la mejor alternativa.

      excelsignum@yahoo.es

      estos días estoy de vacaciones, en cuanto tenga un momento te responderé.

      Saludos.

      Me gusta

  25. Gracias te he mandado un correo espero poderme dar a entender, de hecho tu código me sirvió pero ya sabes uno siempre quiere hacer más cosas jeje, un sludo

    Me gusta

  26. hola buena tarde.. tengo una duda, es posible hacer una busqueda con un formulario de excel, pero en mas de una db de access, son practicamente los mismo campos, pero son alimentadas por diferentes sistemas, y requiero hacer una busqueda pero es complicada hacerlo en cada una de las db y se facilitaria mucho tener una solo busqueda

    Me gusta

      • Hola Edgard,

        Después de investigar las posibles alternativas a tu comentario, lo ideal es que realices un trabajo previo en Access, es decir, que desde la base de datos principal utilices la herramienta de importación de datos externos e importes la base (o bases) de datos que necesites y ahí selecciones las tablas o consultas que te interesen. De esta forma, tendrás todos los datos en la misma base de datos (y vinculados al resto de tablas) luego solo tienes que importarlos a Excel o iniciar una consulta SQL pero dentro de la misma base.

        Es muchísimo más sencillo y cómodo.

        Saludos

        Me gusta

  27. Ok, lo voy a intertar de esta forma, si lo habia pensado asi, solo que buscaba una alternativa que fuera mas practica, pero al parecer esta es la mas rapida y comodo

    Me gusta

  28. Tengo un problema, la tabla contiene más de 65000 registros, con lo que no deja copiarlo y pegarlo al portapapeles. Habría que hacerlo exportando la consulta a excel..

    Se puede?

    Gracias

    Me gusta

    • Hola Álvaro.
      La solución es sencilla. Solo tienes que guardar a hoja de Excel en la que tienes la macro como xlsx donde el límite de filas es de 1.048.576
      La macro funciona igual para xls como para xlsx. Eso sí, deberás guardarla como libro de Excel habilitado para macros.

      Saludos

      Me gusta

  29. Buenas Segu, fabulosa la aportación. Funciona perfectamente.Pero una pregunta como seria para que la ejecución sea desde access, bien con un botón o un evento. Estoy haciendo una aplicación en access en las que unas tablas (resultados1 y resultados2 )alimentadas desde un formulario las envío a excel con el evento al salir del formulario,porque tengo que hacer unos cálculos y lo hago de la siguiente manera.

    Sub exportaexcel()
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12, «resultados1», «C:\Users\Joaquin\Desktop\autonomo.xlsm», True
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12, «resultados2», «C:\Users\Joaquin\Desktop\autonomo.xlsm», True
    End Sub

    Me crea las dos hojas en autonomo.xlsm y pasa los datos de access.

    Porque la idea es que una vez excel recibe los datos realizar unos cálculos y automáticamente recupere esos cálculos en access para realizar un informe.

    Me gusta

    • Gracias Joaquín;

      Me alegro que te resulte de interés el código 🙂

      Sobre lo que comentas, creo (si entiendo correctamente lo que explicas) que lo tienes fácil, dato que estás utilzando el objeto DoCmd para exportar con el método acExport, puede hacer exactamente lo mismo, pero con el método acImport, siguiendo tu ejemplo:

      Sub importaexcel()
      DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, “resultados1”, “C:\Users\Joaquin\Desktop\autonomo.xlsm”, True
      DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, “resultados2”, “C:\Users\Joaquin\Desktop\autonomo.xlsm”, True
      End Sub

      Sin embargo, a la hora de importa tendrás el siguiente problema, y es que los registros se irán duplicando a medida que vayas importando, dado no estás actualizando, sino que simplemente importas. Una posible solución a este problema puede ser, eliminando la tabla que tienes en Access antes de importar la de Excel,

      On error resume next
      DoCmd.DeleteObject acTable, "resultados1"
      DoCmd.DeleteObject acTable, "resultados2"
      On error goto 0

      Es decir: para exportar sería la macro que indicas, y para importar sería esta (completa):

      Sub importaexcel()
      DoCmd.DeleteObject acTable, "resultados1"
      DoCmd.DeleteObject acTable, "resultados2"
      DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, “resultados1”, “C:\Users\Joaquin\Desktop\autonomo.xlsm”, True
      DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, “resultados2”, “C:\Users\Joaquin\Desktop\autonomo.xlsm”, True
      End Sub

      Ojo!! sé cuidadoso y haz algunas pruebas, estas trabajando con instrucciones que borran tablas.

      Otra forma, menos agresiva es eliminar solo los registros de la tabla de access y luego actualizar con los datos de la hoja de Excel. La instrucción para borrar los registros es:

      DoCmd.RunSQL » delete * from resultados1 list»

      y la macro sería:

      Sub importaexcel()
      DoCmd.RunSQL " delete * from resultados1 list"
      DoCmd.RunSQL " delete * from resultados2 list"
      DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, “resultados1”, “C:\Users\Joaquin\Desktop\autonomo.xlsm”, True
      DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, “resultados2”, “C:\Users\Joaquin\Desktop\autonomo.xlsm”, True
      End Sub

      Aquí, será Access quien te advierta que se van a borrar x registros antes de importar.

      Ya me contarás si te sirve o necesitas otro tipo de desarrollo.

      PD: doy por supuesto que en Access tienes dos tablas que se llaman resultados1 y resultados2

      Saludos.

      Me gusta

    • Hola Segu, nuevamente gracias por tu dedicación. Te detallo lo que estoy haciendo.
      Estoy intentando hacer un pequeño programa de contabilidad de autonomos, (registro de ventas, compras y gastos).
      El registro de ventas se alimenta de un formulario factura, con productos en plan sencillo.
      Al final hay un registro de facturas (fecha,numero,cliente, cif, base, %iva, iva y total factura.
      En compras y gastos también hay un registro que se crea desde un formulario directamente de entrada de apuntes, con los campos fecha, factura, proveedor, cif, base, % iva, iva, total factura, y aparte campos con el importe de la base para determinar el tipo de gastos que (compras, alquiler, suministros, reparaciones, etc). Todo esto ya lo tengo montado y a falta de pequeños detalles me funciona como yo quiero. Hasta aquí perfecto, dentro de las limitaciones de un principiante.
      Lo que quiero conseguir es hacer un informe de resultados (aquí detalle simplificado)

      1 Trim. 2º Trim. 3º Trim. 4º Trim. Total Anual
      Ventas
      Compras
      alquiler
      Asesorias,
      Suministros
      ETC

      Beneficio o perdida

      Es decir quiero totalizar por trimestres todas ventas y gastos y no lo consigo hacer con consultas.He probado con consultas de tablas cruzadas pero no consigo los resultados.
      Entonces pensé en volcar toda la información a excel, ingreso y ventas (resultados1) y compras y gastos (rtesultados2), en un evento al grabar los asientos. y hasta ahí bien.

      En el libro de excel hay tres hojas, resultados1, resultados2, y datos que con la formula «SUMAR.SI.CONJUNTO, convienrte las dos hojas anteriores en una sola fila totalizando por trimestres cada cuenta (venta1T,venta2T,ventas3T,ventas4T,compras1T,etc)
      y es esta hoja solo con dos filas, Titulos y datos la que quiero recuperar desde access en una tabla o consulta para que mi sirva de base para elaborar el informe.

      Mucho rollo, creo, si quieres te paso un fichero con lo que tengo hecho.

      Atentamente.

      Me gusta

      • Hola Joaquín.
        Ok, envíame el Access (con estructura de datos para realizar pruebas) , para ver si se puede realizar todo en Access.

        También el Excel y miro cuál es la mejor solución.
        En cuanto tenga un momento, reviso los archivos.
        Saludos.

        Me gusta

  30. si yo tengo la base de datos y el macro de excel en mi computadora y quiero compartirlo con mis compañeros de trabajo, solo les creo un acceso directo del macro desde mi carpeta compartida y ellos podran actualizar los datos de la base de datos?

    Me gusta

    • Hola Arturo:

      La base de datos debe estar en la carpeta compartida, y cada uno de tus compañeros debería tener un archivo excel con la macro (donde se especificará la ruta a la base de datos), de forma que cuando la ejecuten obtengan la información actualizada, sea una tabla o una consulta. La idea es compartir información y para ello debes dejarla en un lugar común, la carpeta compartida, y luego que cada uno de ellos actualice esa información para sus propios procesos en su archivo.

      Espero haber contestado a la pregunta. Muchas gracias por la consulta.

      Un saludo!!

      Me gusta

  31. Hola Segu.
    Tengo una pregunta si intente realizar la conexión con una consulta de anexar o de actualización y no me pega la información en el excel a que se debe.

    Gracias y saludos.

    Me gusta

    • Hola Alan:

      Deberías poder importar la consulta directamente, la macro importa las consultas y las tablas de Access. Tendría que ver la base de datos y el archivo de Excel para poder verificar cualquier problema.

      Puedes enviarme un ejemplo, con la misma estructura y nombres de los archivos (el contenido inventado) a excelsignum@yahoo.es

      Saludos.

      Me gusta

  32. Hola SIGNUM !! Tengo una pregunta y no se si tengas ya el articulo al respecto. tengo varios libros de excel que son hojas de calculo de mis pacientes de nutrición. Llevo mas de 100 libros. Lo que hago es tenerlos en una carpeta y buscarlo por nombre y abrirlo. Hay hay alguna forma de generar alguna interface que me permita abrir un programa de base de datos y de ahí jalar mi libro de excel según el nombre ? Para que se vea mas profesional. Hay software del tipo, pero no me agradan del todo.

    Me gusta

    • Hola Diego:

      No comprendo qué es exactamente lo que necesitas. Es decir, tienes los libros de los clientes en una carpeta y los buscar con el nombre, luego abres el archivo y consultas. Y necesitas un programa que poniendo el nombre del clientes encuentre la información que necesitas consultando en cada uno de los libros, ¿es correcto?.

      De ser así se podría realizar, pero todas las hojas de todos los libros deberían tener la misma estructura, concretar qué datos se quieren mostrar, si se quiere que sea en una hoja o en un formulario, etc, etc.

      Se podría hacer, pero creo que lo realmente necesitarías es una base de datos en condiciones, en Excel o en Access, donde estén todos tus clientes registrados.

      Por esta web tengo un formulario que gestiona clientes: https://excelsignum.com/2016/05/02/gestion-de-clientes-modificaciones/

      Tendrías que adaptarlo a tu negocio modificando la programación.

      Saludos.

      Me gusta

  33. Buenas tardes.

    Muchas gracias por tu aporte, me ha servido de gran ayuda, pero sólo para bases de datos Access sin contraseña. Cuando tengo que trabajar con una base de datos Access con contraseña, no se realiza la conexión a la base de datos. he mirado en mil sitios, el tuyo es que que más claro lo explica, pero ni aún usando tu código de ejemplo consigo conectarme a una base de datos Access con contraseña. Mi versión de Microsoft office es la de 2010.

    Por favor, cualquier luz al respecto?

    Gracias por tu tiempo y tu dedicación

    Me gusta

    • Hola Carmen:

      Espero poder ayudarte. Doy por supuesto que has intentado introducir la contraseña en la parte de la macro:

      cnn.Properties(«Jet OLEDB:Database Password») = «tucontraseña»

      De todas formas intenta realizar la conexión sin la contraseña para descartar cualquier otro problema. Si es seguro que el problema es de la contraseña, puede ser por estos dos motivos:

      1 – Que tengas un «-» en la contraseña, estilo «001-tabla2». Este problema se debe a que el operator «-«lo interpretará como un menos y no como un guión, `para que lo puede interpretar como un guión, debes utilizar los corchetes [ ], así:

      cnn.Properties(«Jet OLEDB:Database Password») = «[001-tabla2]»
      O también puede utilizar el guión bajo y no tendrás que usar los corchetes:
      cnn.Properties(«Jet OLEDB:Database Password») = «001_tabla2»

      2 – Si no usas los guiones en la contraseña y sigue sin funcionar, es posible que se deba al cifrado de la contraseña:

      Para solucionarlo debes hacer las siguientes modificaciones en el Access que tiene la base de datos: entra en OPCIONES, luego vas a CONFIGURACIÓN DE CLIENTE y en donde pone METODO DE CIFRADO, debes elegir USAR CIFRADO HEREDADO.

      Estoy seguro que con alguno de estos dos sistemas te funcionará.

      No obstante, si sigues con el problema, me puedes enviar el Access, con una tabla, con un ejemplo inventado y con la contraseña introducida e inventada con el formato similar a la que tienes (indicándome cual es). Y realizaré una prueba para solucionar el problema. Pero antes de nada verifica las dos soluciones que te indiqué.

      Saludos.

      Me gusta

  34. Excelente aporte para contribuir un poco seria mejor obtener el path directamente del libro para no asignar una ruta estatica.
    «G:\PRUEBAS ACCESS\CONEXION ACCESS Y EXCEL. OLEBD\DATABASE.accdb»
    path_Bd = ActiveWorkbook.Path + «\DATABASE.accdb»

    Saludos.

    Me gusta

  35. Hola buenas tardes, excelente post, algo asi ando buscando pero para una base de datos de Postgresql mediante consultas desde Excel. ¿Cree que se pueda actualizar la base de datos desde un formulario mediante un boton de comando?, porque excel tiene instrucciones de actualizar cada 20 minutos en egundo plano pero no lo hace. En la aplicacion que desarrolle se muestran unicamente los formularios de consulta que manipula el usuario. Lo que he pensado es poner un boton Actualizar, pero no he encontrado nada para excel y postgresql. Les agradecere si hay alguna respuesta positiva. Saludos cordiales.

    Me gusta

  36. Hola, gracias por la informacion pero no es lo que busco. La conexion a la base de datos ya la tengo resuelta, lo inico que me interesa saber es el codigo en un formulario vba de excel que haga las veces de «actualizar todo» que tiene excel sin hacerlo manualmente, dicho de otro modo: dando clic en un boton de comando puesto en un formulario que haga este proceso. Un cordial saludo.

    Me gusta

    • OK.

      Ahora comprendo, puedes ejecutar un proceso colocando en thisworkbook el siguiente código:

      Private Sub Workbook_Open()
      Application.OnTime Now + TimeValue("00:00:20"), "TUMACRO"
      End Sub

      Donde TUMACRO, es la macro en la que tienes la conexión. En el momento que abres el excel cada 20 minutos se ejecutará tu macro.

      Saludos.

      Me gusta

  37. Estimado Segundo, se que este tema tiene mucho tiempo de publicado, y recien lo he podido desarrollar junto con tu ejemplo, está fabuloso

    Me gusta

  38. Buenas Segu…

    He utilizado el código que indicas aquí para recuperar datos de unas Tablas de Access a un Excel.
    Si la Base de Datos no tiene contraseña funciona perfectamente.

    Pero si cifro la Base de Datos no hay manera de que funcione..
    Me saca el siguiente error ( «Se ha producido el error ‘-2147467259 (80004005)’ en tiempo de ejecución: No es una contraseña válida.)
    Evidentemente después de comentar la línea (‘On Error GoTo Fallo)

    El codigo… aparte del resto… sería este…

    Ruta_BD = «E:\00.-BD\BD_General.accdb»
    Cnn.Provider = «Microsoft.ACE.OLEDB.12.0»
    Cnn.Properties(«Data Source») = Ruta_BD
    ‘EN CASO QUE LA BASE DE DATOS TENGA UNA CONTRASEÑA, SE DEBE PONER AQUÍ
    Cnn.Properties(«Jet OLEDB:Database Password») = «123»
    Cnn.Open

    Y se me queda parada dando el error en la línea de.. (Cnn.Open)

    Y tengo activas las siguientes Referencias:
    Todas las que indicas tu… menos la última (Microsoft Forms 2.0 Object Library)
    No me aparece en el listado.

    Puedes ayudarme??

    Me gusta

    • Hola Pablo: Para solucionarlo debes hacer las siguientes modificaciones en el Access que tiene la base de datos: entra en OPCIONES, luego vas a CONFIGURACIÓN DE CLIENTE y en donde pone METODO DE CIFRADO, debes elegir USAR CIFRADO HEREDADO.

      Es a única forma de que identifique contraseña. Así debería funcionarte. Lo de las referencias no pasa nada aunque no tengas forma marcado (es para formularios).

      Prueba y luego de dices si te ha funcionado onda el cifrado heredado. Saludos

      Me gusta

      • Bravoooo!!!!

        Gracias… Si era eso… Pero he tenido que volver a cifrar la base de datos de nuevo.
        He abierto la base de datos en Modo Exclusivo… Descifrado Base de Datos… Volver a abrir la Base de Datos en Modo Exclusivo… Y cifrado de Base de Datos con la Contraseña.

        Por si le pasa lo mismo a otra gente…

        Gracias Segu… Te dejaré de mano por si tengo mas dudas con lo que estoy haciendo.

        Me gusta

    • Hola David:

      Efectivamente, en local funciona correctamente. No ha probado a realizar la programación con SharePoint, pero en cualquier caso, lo investigaré.

      Saludos.

      Me gusta

¿Te ha gustado?, Realiza un comentario.

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.