Access - Leer en Excel datos de Access, de forma dinámica

 
Vista:

Leer en Excel datos de Access, de forma dinámica

Publicado por Marta_81 (3 intervenciones) el 25/04/2006 13:24:45
ola forer@s, el tema que voy a plantear es un poco complicado. No he encontrado nada parecido por ahí. Ahí va:

Tengo una pequeña aplicación en excel. En una celda tengo una validación de datos (uso Datos -> Validación... -> Permitir -> Lista) y el usuario puede seleccionar en esa celda (mediante una lista desplegable) datos que hay en un rango de celdas de otra pestaña. Si los datos del rango cambian, los datos de la lista desplegable cambian también de forma automática.

Ahora necesito la misma funcionalidad pero con una diferencia: que los datos de origen vengan de una base de datos access (por ejemplo, todos los datos de una columna determinada). No me vale Obtener datos Externos -> Importar Datos, ya que quiero que la comunicación sea dinámica. Se trataría de una comunicación entre excel y access "en tiempo real" y un tanto particular. No se si esto será posible con VBA o alguna macro...

Bueno, espero haberme explicado bien. Un saludo y gracias de antemano.
Marta
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Actualizar lista desplegable en Excel desde una base de datos en Access en tiempo real

Publicado por Alejandro (4142 intervenciones) el 18/07/2023 16:58:43
Para lograr una comunicación "en tiempo real" entre Excel y Access, y actualizar automáticamente la lista desplegable en Excel con los datos de una columna en una base de datos de Access, puedes utilizar VBA y una macro. Aquí tienes una solución general que puedes adaptar a tu caso específico:

1. Abre tu archivo de Excel y presiona Alt + F11 para abrir el Editor de Visual Basic.
2. En el Editor de Visual Basic, ve al menú "Insertar" y selecciona "Módulo" para crear un nuevo módulo.
3. En el nuevo módulo, coloca el siguiente código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Option Explicit
 
Sub ActualizarListaDesplegable()
    Dim rngData As Range
    Dim strConn As String
    Dim conn As Object
    Dim rs As Object
    Dim strSQL As String
    Dim i As Long
 
    ' Define la conexión a la base de datos de Access
    strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Ruta\TuBaseDeDatos.accdb;"
 
    ' Define la consulta SQL para obtener los datos de la columna en Access
    strSQL = "SELECT NombreColumna FROM NombreTabla;"
 
    ' Crea una instancia de la conexión y el objeto Recordset
    Set conn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")
 
    ' Establece la conexión con la base de datos de Access
    conn.Open strConn
 
    ' Ejecuta la consulta SQL y guarda los datos en el objeto Recordset
    rs.Open strSQL, conn
 
    ' Verifica si se encontraron datos
    If Not rs.EOF Then
        ' Borra los datos existentes en la lista desplegable en Excel
        With ThisWorkbook.Sheets("NombreHoja").Range("CeldaListaDesplegable").Validation
            .Delete
        End With
 
        ' Copia los datos del objeto Recordset a un rango en Excel
        Set rngData = ThisWorkbook.Sheets("NombreHoja").Range("RangoDestino")
        rngData.ClearContents
        rngData.Resize(rs.RecordCount).Value = rs.GetRows
        rngData.EntireColumn.AutoFit
 
        ' Crea la lista desplegable en Excel basada en el rango de datos actualizado
        With ThisWorkbook.Sheets("NombreHoja").Range("CeldaListaDesplegable").Validation
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=" & rngData.Address
            .InCellDropdown = True
        End With
    End If
 
    ' Cierra el objeto Recordset y la conexión a la base de datos de Access
    rs.Close
    conn.Close
 
    ' Limpia los objetos
    Set rs = Nothing
    Set conn = Nothing
End Sub

4. Reemplaza "C:\Ruta\TuBaseDeDatos.accdb" con la ruta y nombre de tu base de datos de Access.
5. Reemplaza "NombreColumna" con el nombre de la columna que deseas utilizar en Access.
6. Reemplaza "NombreTabla" con el nombre de la tabla que contiene los datos en Access.
7. Reemplaza "NombreHoja" con el nombre de la hoja de Excel donde se encuentra la lista desplegable.
8. Reemplaza "CeldaListaDesplegable" con la dirección de la celda donde deseas que aparezca la lista desplegable en Excel.
9. Reemplaza "RangoDestino" con la dirección del rango donde deseas que se coloquen los datos actualizados de Access en Excel.

Después de haber agregado este código, puedes ejecutar la macro `ActualizarListaDesplegable()` cada vez que necesites actualizar los datos de la lista desplegable desde la base de datos de Access. Esto recuperará los datos de la columna en Access y los actualizará automáticamente en Excel.

Recuerda ajustar los nombres de las hojas, celdas, rango y detalles de la conexión según tu caso específico. Además, asegúrate de tener los controladores de base de datos adecuados para trabajar con Access desde Excel.

Espero que esta solución te sea útil. ¡Buena suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar