Cómo listar en un combo box todas las tablas y consultas de una base de datos en access 2010.

Estoy haciendo una BD, y me hace falta listar en un cuadro combinado las tablas y consultas de la base de datos, con el objetivo de seleccionar alguna y exportarla a excel... Vi como hacerlo mediante un cuadro de texto pero es mejor seleccionarla que escribir el nombre de la tabla/conculta, para evitar errores..

1 respuesta

Respuesta
1

Esta es una forma, la más fácil, creo yo, de hacerlo:

En el evento que consideres más adecuado a tu caso ("al cargar" del formulario, "al entrar" o "al recibir el enfoque" del cuadro combinado, "al hacer click" en un botón...) le generas este código :

Private Sub....
Dim Tbl As AccessObject
Dim Qry As AccessObject
Dim miDB As DAO.Database
Set miDB = CurrentDb
For Each Tbl In CurrentData.AllTables
    If Not Tbl.Name Like "MSys*" Then Me.cboObjetos.AddItem Tbl.Name
Next Tbl
For Each Qry In CurrentData.AllQueries
    Me.cboObjetos.AddItem Qry.Name
Next Qry
miDB.Close
Set miDB = Nothing
End Sub

El nombre del cuadro combinado en el código es cboObjetos, que tendrás que cambiar por el que tú tengas.

Y muy importante, la propiedad "Tipo de origen de la fila" (en la pestaña Datos) del cuadro combinado ha de estar establecida a "Lista de valores".

También se la puedes modificar en el código, añadiendo antes del primer For esta otra linea:

Me.cboObjetos..RowSourceType = "Value List"

La última línea que te comentaba lleva un punto de más, es así:

Me.cboObjetos.RowSourceType = "Value List"

¡Gracias! Sveinbjorn El Rojo, Me funciona bien esto que me dices que lo considero en mi ignorancia en VB como el primer paso, el siguiente sería mediante un botón que tiene el siguiente código:

  Private Sub Comando74_Click()
If IsNull(cuadoCombinadoListar) Then
    MsgBox "Al menos debe seleccionar una tabla a exportar"
    Else: EnviarDatos Me.cuadoCombinadoListar
    End If
    Exit Sub
End Sub

y un módulo de código que copié de otro lugar (unas clases de Access en YouTube), exportar el elemento seleccionado del combo box hacia Excel, esto funciona!!! pero cuando vuelvo a desplegar el cuadro combinado sin cerrar el formulario, me duplica el listado de tablas, y así sucesivamente cada vez que selecciono y doy en el botón, me sale repetida la lista tantas veces como exporte alguna tabla...

te paso también el modulo (honestamente no se como se conecta el botón con esta parte para lograr exportar la tabla. A unque he tratado le leer sobre el tema) Gracias nuevamente..

_______________________________________

Option Compare Database

Sub EnviarDatos(ParamArray nombreConsultas() As Variant)

On Error GoTo ControlarErrores

Dim Registros As Recordset

Dim Campos As Field

Dim i As Integer

Dim appExcel As Object

Dim Hoja As Object

Dim Fila As Integer

Dim Columna As Integer

   Set appExcel = CreateObject("Excel.Application")

   appExcel.Application.Visible = True

   appExcel.Application.Workbooks.Add 

 For i = 0 To UBound(nombreConsultas())

       Set Hoja = appExcel.Sheets.Add

       Hoja.Name = nombreConsultas(i)

       Set Registros = CurrentDb.OpenRecordset(nombreConsultas(i))

       Fila = 1

       Columna = 1

       For Each Campos In Registros.Fields

           Hoja.Cells(Fila, Columna) = Campos.Name

           Columna = Columna + 1

       Next     

       Fila = 2

       Columna = 1

       While Not Registros.EOF

           For Each Campos In Registros.Fields

               Hoja.Cells(Fila, Columna) = Campos.Value

               Columna = Columna + 1

           Next

           Columna = 1

           Fila = Fila + 1

           Registros.MoveNext

       Wend

       Registros.Close

   Next 

   Set appExcel = Nothing 

   Exit Sub 

ControlarErrores:

   MsgBox "Error No: " & Err.Number _

   & "; Description: " & Err.Description 

End Sub

Añade esta línea antes del primer For en el primer código que te mandé (el que rellena el cuadro)

Me.cuadoCombinadoListar.RowSource=""

El código completo quedaría así:

Private Sub ...
Dim Tbl As AccessObject
Dim Qry As AccessObject
Dim miDB As DAO.Database
Set miDB = CurrentDb
Me.cuadoCombinadoListar.RowSourceType = "Value List"
Me.cuadoCombinadoListar.RowSource = ""
For Each Tbl In CurrentData.AllTables
    If Not Tbl.Name Like "MSys*" Then Me.cuadoCombinadoListar.AddItem Tbl.Name
Next Tbl
For Each Qry In CurrentData.AllQueries
    Me.cuadoCombinadoListar.AddItem Qry.Name
Next Qry
miDB.Close
Set miDB = Nothing
End Sub

¡Gracias! Sveinbjorn El Rojo Problema resuelto!!!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas