Anders: Necesito poner una tabla de access dentro de una planilla de excel para hacer cálculos. El tema es que sea en tiempo real. O sea que los cambios de datos en la tabla, se modifiquen también en excel. ¿Algún camino? Atentamente. Omar
Una pregunta muy interesante la verdad. Que yo sepa, esto no se puede solucionar desde Excel sino habrá que emplear VBA. Activamos un temporizador para luego actualizar los datos por ejemplo cada 5 segundos. Es decir, Excel se contectará a la tabla Access cada 5 segundos. Utilizamos 2 módulos VBA de un libro Excel. En VBA, no olvides marcar Herramientas-Referencias: Microsoft Access... En este ejemplo tenemos una base de datos db.mdb en la misma carpeta. Si quieres te mando un libro con este ejemplo/Anders Módulo 1 (Temporizador) Public datHora As Date Public Const conIntervalo = 5 '5 segundos Public Const conRunMacro = "Actualizar_Access" 'Iniciar temporizador Sub StartTemporizador() datHora = Now + TimeSerial(0, 0, conIntervalo) 'iniciar el temporizador Application.OnTime _ Earliesttime:=datHora, _ Procedure:=conRunMacro, _ Schedule:=True End Sub 'Actualizar Sub Actualizar_Access() Run ("Conectar_Access") Run ("Importar_Access") Run ("Desconectar_Access") 'reiniciar el temporizador StartTemporizador End Sub 'Terminar temporizador Sub StopTemporizador() On Error Resume Next 'desactivar el temporizador Application.OnTime _ Earliesttime:=datHora, _ Procedure:=conRunMacro, _ Schedule:=False End Sub Módulo 2 (Conexión Access) Dim datConnection As ADODB.Connection Dim recSet As ADODB.Recordset Dim strDB, strSQL As String Dim strTabla As String Dim lngTablas As Long Dim i As Long Sub Conectar_Access() 'elegir uno de estas dos rutas al archivo Access strDB = ThisWorkbook.Path & "\" & "db.mdb" 'strDB = "C:\vba\db.mdb" 'si en otra carpeta 'nombre de la tabla del archivo Access strTabla = "tiemporeal" 'crear la conexión Set datConnection = New ADODB.Connection Set recSet = New ADODB.Recordset datConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source =" & strDB & ";" End Sub Sub Importar_Access() 'consulta SQL strSQL = "SELECT * FROM " & strTabla & "" recSet.Open strSQL, datConnection 'copiar datos a la hoja ActiveSheet.Cells(2, 1).CopyFromRecordset recSet 'copiar rótulos lngCampos = recSet.Fields.Count For i = 0 To lngCampos - 1 ActiveSheet.Cells(1, i + 1).Value = recSet.Fields(i).Name Next End Sub Sub Desconectar_Access() 'desconectar recSet.Close: Set recSet = Nothing datConnection.Close: Set datConnection = Nothing End Sub
Anders: Una respuesta que debió llevar mucho trabajo realizarla! Necesito unas aclaraciones que para vos serán sencillas, NO PARA MI que soy diseñador gráfico. ¿Dónde dice:? No olvides marcar Herramientas-Referencias: ¿Microsoft Access? :¿Destildo los otros? ¿En qué sentencias escribo la ruta del archivo .mdb en cuestión? Una vez que inserté los 2 módulos, y a cada uno le aplico sus respectivos scripts, grabo ¿y después? No sabía la complejidad de la pregunta Atentamente. Omar
Fue sencillo, lo bueno de VBA es que te deja reutilizar el código! No tienes que destildar nada. Si la base de datos está en la misma carpeta que el archivo Excel: strDB = ThisWorkbook.Path & "\" & "db.mdb" Si está en otra carpeta: strDB = "C:\vba\db.mdb? Una vez configurado los dos módulos (el código + ruta para la base de datos), podemos ejecutar el programita. ¿En Excel, Herramientas? ¿Macro? Macros: Ejecuta la macro STARTTEMPORIZADOR, y ya está. Para terminar el programita (debes hacerlo), ejecuta STOPTEMPORIZADOR.