Access en excel en tiempo real

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

1 respuesta

Respuesta
1
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.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas