Error con control Me.Controls

Estoy intentando desarrollar un código en donde me llene varios combobox con datos de una tabla de access. Buscando por aquí y por allá di con casi todo el código pero el compilador me arroja el siguiente error en la línea Me. Controls

Error de compilación: No se encontró el método o el dato miembro

Este es el código completo de la sentencia y adjunto una imagen con las referencias habilitadas por si faltase alguna.

Private Sub Worksheet_Activate()
Dim CN As Object
Dim RsProfe As Object
Dim t, c, cb, o As String 'Tabla, campo, consulta, objeto formulario
Dim nombre As String
Dim fila, i As Integer
Dim ct
 Set CN = New ADODB.Connection
 Set RsProfe = New ADODB.Recordset
 fila = 2
 For i = 1 To 2
    t = Sheets("objetos").Cells(fila, 2).Value 'Nombre de la Tabla
    c = Sheets("objetos").Cells(fila, 3).Value 'Nombre del campo
    cb = "Select" & c & "From " & t
    nombre = ThisWorkbook.Path & "\BD-GI.mdb"
    CN.Open "provider=microsoft.jet.oledb.4.0; " & "data source=" & nombre & ";"
        RsProfe.ActiveConnection = CN
        RsProfe.CursorType = adOpenStatic
        RsProfe.LockType = adLockOptimistic
        RsProfe.CursorLocation = adUseClient
        ''Consulta BD''
        RsProfe.Open cb
        For Each ct In Me.Controls
            If ct.Name = o Then
                Do While Not RsProfe.EOF()
                  o.AddItem RsProfe(c)
                   RsProfe.MoveNext
                Loop
            End If
          RsProfe.Close
          Set RsProfe = Nothing
      CN.Close
   Set CN = Nothing
fila = fila + 1
Next
End Sub

1 Respuesta

Respuesta
1

No te funciona bien porque la sub está basada para que funcione con un formulario. Si creas un formulario y pones los combos en él, diría que si te funcionaría

Excelente respuesta... probé en un formulario y funciona a la perfección. Ahora mi intención por un tema de manejo es hacerlo directo en la hoja de calculo con controles activex, ¿qué función debería usar para poder realizar lo que se refleja en el código?.

De antemano muchas gracias.

Estimado experto, quiero contarte que ya di con la solución al caso. De todas formas agradezco tu valioso aporte ya que así pude dar con la solución.

Adjunto el código para quienes quieran incursionar en llenados automáticos de múltiples combobox y listbox con bases de datos access.

El homologo de Me.controls en hojas de calculo es OLEObjects y Shapes

Private Sub Worksheet_Activate()
Dim CN, RsProfe As Object
Dim t, c, cb, o, nombre As String 'Tabla, campo, consulta, objeto formulario
Dim fila, i As Single
Dim ct As OLEObject
 fila = 2
 For i = 1 To 2
    Set CN = New ADODB.Connection
    Set RsProfe = New ADODB.Recordset
    t = Sheets("objetos").Cells(fila, 2).Value 'Nombre de la Tabla
    c = Sheets("objetos").Cells(fila, 3).Value 'Nombre del campo
    o = Sheets("objetos").Cells(fila, 1).Value 'Nombre del objeto formulario
    cb = "Select " & c & " From " & t
    nombre = ThisWorkbook.Path & "\BD-GI.mdb"
    CN.Open "provider=microsoft.jet.oledb.4.0; " & "data source=" & nombre & ";"
        RsProfe.ActiveConnection = CN
        RsProfe.CursorType = adOpenStatic
        RsProfe.LockType = adLockOptimistic
        RsProfe.CursorLocation = adUseClient
        ''Consulta BD''
        RsProfe.Open cb
     For Each ct In Worksheets(2).OLEObjects
            If ct.Name = o Then
                Do While Not RsProfe.EOF()
                  Worksheets(2).OLEObjects(ct.Name). _
                   Object.AddItem RsProfe(c)
                  RsProfe.MoveNext
                Loop
            End If
      Next
          RsProfe.Close
          Set RsProfe = Nothing
      CN.Close
   Set CN = Nothing
fila = fila + 1
Next
End Sub

En la parte de declaración de variables pon

 Dim i as double

' i=1 si la tabla no tiene cabecera o i=2 si la tiene

      For Each ct In Me.Controls
            If ct.Name = o Then
                Do While Not RsProfe.EOF()
                  o.AddItem RsProfe(c)
                  Hoja1.Range("A"+cstr(i))=RsProfe(c) '<== Añade esto en el código
                  i=i+1                               '<== Añade esto en el código
                  RsProfe.MoveNext
                Loop
            End If

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas