Hola, espero alguien pueda ayudarme.
Tengo una tabla "CLIENTES" dentro de una base de datos "CONTAINTEGRAL.accdb" en access 2016.
En excel tengo una macros que abre un formulario, un combobox que carga los datos "Razón Social" desde la tabla "CLIENTES" de access. Hasta ahí todo bien.
El problema es que cuando selecciono un dato en el combobox quiero que muestre el dato relacionado "RUC" en el textbox, pero no se como hacerlo.
Alguien sabe como obtener ese dato?
Mi código para lo que tengo avanzado es:
------------------------------------------->
MODULO:
-------------------------------------------->
Public MiConexion As New ADODB.Connection
Public Rs As New ADODB.Recordset
Sub Conectar()
Set MiConexion = New ADODB.Connection
With MiConexion
.Provider = "Microsoft.ACE.OLEDB.16.0"
.ConnectionString = "Data Source=" & ThisWorkbook.Path & "\CONTAINTEGRAL.accdb"
.Open
End With
End Sub
------------------------------------------->
FORM_INICIO:
-------------------------------------------->
Private Sub UserForm_Initialize()
Call Conectar
Rs.ActiveConnection = MiConexion
Rs.CursorType = adOpenStatic
Rs.LockType = adLockOptimistic
Rs.CursorLocation = adUseClient
Rs.Open "Select [RAZÓN SOCIAL] From CLIENTES"
Do While Not Rs.EOF()
Cmb_RSCliente.AddItem Rs("RAZÓN SOCIAL")
Rs.MoveNext
Loop
Set Rs = Nothing
MiConexion.Close
Set MiConexion = Nothing
Se puede hacer de varias maneras. Yo lo haría modificando ligeramente tu combobox.
El combo puede tener más de una columna. Puedes modificar en propiedades para que tenga 2 columnas, y luego en la propiedad "ancho de columnas" poner la primera a 0 para que no se vea. La primera será el valor que se toma cuando llamas a Cmb_RSCliente.Value
Para llenar el combobox tendrías que hacer entonces otra cosa. En vez de utilizar AddItem así, lo haría de esta otra forma:
Do While Not Rs.EOF()
With Cmb_RSCliente
.AddItem
.list(.listcount,0) = Rs("RUC")
.list(.listcount,1) = Rs("RAZÓN SOCIAL")
end with
Rs.MoveNext
Loop
Prueba y nos dices
Un saludo
Gracias por responder...
En el cuadro de propiedades hice esto:
BoundColumn = 1
ColumnCount = 2
TextColumn = 2
* El codigo quedo así, pero me sale error.
----------------------------------------------------------------------------------------
Private Sub UserForm_Initialize()
Call Conectar
Rs.ActiveConnection = MiConexion
Rs.CursorType = adOpenStatic
Rs.LockType = adLockOptimistic
Rs.CursorLocation = adUseClient
Rs.Open "CLIENTES"
Do While Not Rs.EOF()
With Cmb_RSCliente
.AddItem
.List(.ListCount, 0) = Rs("RUC")
.List(.ListCount, 1) = Rs("RAZÓN SOCIAL")
End With
Rs.MoveNext
Loop
Set Rs = Nothing
MiConexion.Close
Set MiConexion = Nothing
End Sub
----------------------------------------------------------------------------------------
Adjunto los archivos, a ver si alguien me puede ayudar please!
¿Qué error te sale y en qué línea?
Sale una ventana que dice:
Error '381' en tiempo de ejecución: No se puede configurar la propiedad List. Índice de matriz de propiedades no valido.
Hago click en DEPURAR y me muestra el error en la linea del modulo de la macro del boton que abre el formulario y antes no tenía ese error.
Sub BOTON_REGISTRAR()
Load Form_Inicio ------------------------------------> Esta linea se resalta
Form_Inicio.Show
End Sub
Vale, cuando te salga ese error, sigue dándole a F8 hasta que vuelva a fallar.
Seguramente se te pare en la línea que dice
.List(.ListCount, 0) = Rs("RUC")
Creo que el problema es que los parámetros de list empiezan en 0. Por lo tanto, como Listcount es 1 (hay una fila), tienes que poner esto:
.List(.ListCount - 1, 0) = Rs("RUC")
.List(.ListCount - 1, 1) = Rs("RAZÓN SOCIAL")
Espero que te sirva.
Un saludo
Genio!! ese código solucionó el error.
Ya solo quedó agregar este codigo para que copie la columna RUC del combobox al textbox y ya quedo tal como quería. Muchísimas gracias. Saludos =)
-------------------------------------------------------------------------
Private Sub Cmb_RSCliente_Change()
If Cmb_RSCliente.Text <> "" Then
Txt_RUC.Text = Cmb_RSCliente.List(Cmb_RSCliente.ListIndex, 0)
End If
End Sub
-------------------------------------------------------------------------