Saltar al contenido

Hacer consulta a una base datos Access y pasar el resultado obtenido a la celda.


Recommended Posts

publicado

Buenos días;

-Tengo creado una  macro Excel y una  base de datos Access.

Lo que me gustaría conseguir si es posible es lo siguiente:

 Hacer una consulta a una tabla Access según el valor de una celda Excel y que el resultado obtenido me lo aloje en otra celda adyacente.

Adjunto macro de ejemplo.

Saludos y buenas tardes o días a todos.

MConsulta.zip

publicado

Hola Benito,

Pega este codigo en en el modulo de la hoja.

Private Sub Worksheet_Change(ByVal Target As Range)
   Application.EnableEvents = False
   If Target.Address = "$B$2" Then [B3] = "": [B3] = BuscaNombre(CLng(Target))
   Application.EnableEvents = True
End Sub

Function BuscaNombre(ID As Long) As String
   On Error GoTo Ctrl_Err
   Dim miConexion As New ADODB.Connection
   Dim RS As New ADODB.Recordset
   Dim CadenaSql As String
   With miConexion
      If .State = 1 Then .Close
   ' access2010
      .Provider = "Microsoft.ACE.OLEDB.12.0"
   'Ruta BBDD
      .ConnectionString = Application.ActiveWorkbook.path & "\BBDD.accdb"
      .Open
   End With
   CadenaSql = "SELECT tb_cliente.nombre FROM tb_cliente" & _
               " WHERE (((tb_cliente.Id_Cliente)=" & ID & "));"
   With RS
      If .State = 1 Then .Close
      .CursorLocation = 3
      .Open CadenaSql, miConexion, 3, 1
      BuscaNombre = !nombre
   End With
   RS.Close
salir:
   Set RS = Nothing
   miConexion.Close: Set miConexion = Nothing
   Exit Function
Ctrl_Err:
   If Err.Number = 3021 Then
      MsgBox "No existe este registro"
   Else
      MsgBox "Algo no ha funcionado"
   End If
   GoTo salir
End Function

Lo hago con un ADO. COn conexion a Access 2010 si tuvieras otro habrá que cambiar la cadena de conexión.

Ha considerar: tu tenias activada la Referencia Microsoft Active Data Object LIbrary 2.8, desactivala y activa una mayor, con ADO nunca se sabe. En mi caso con Excel 2010 : Microsoft Active Data Object LIbrary 6.1.

Ah se me olvidaba, He visto en la tabla de access que la indexacion está hecha con el Numero de cliente y no con el ID, yo le pondria el ID. Y he supuesto que buscas con el ID, sino tedrás que cambiar la cadena SQL.

publicado

Hola Ikani, primero encantado de interactuar contigo. 

He visto el código que me pasas y funciona correctamente. Lo único es que no puedo cambiar la llave primaria del campo "nºcliente" al campo "Id_Cliente" porque ese número corresponde al "ID" de otro programa y solamente paso algunos clientes y no todos. Sí es verdad que sería mejor.

Un saludo y muchas gracias por contestar. 

Un ? para ti.

 

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.