Logo_Access_global_380x114Favicon_Access_global_180x180Logo_Access_global_380x114Logo_Access_global_380x114
  • Home
  • University
    • Destellos formativos
  • Labs
  • TV
  • Secciones
    • El mundo de Access
    • Explorando VBA
      • Artículos sobre VBA
      • Un trocito de código
    • Entrevistas
      • Profesionales de Access
    • El rincón de Excel
    • Bases de datos
      • MS SQL
      • MySQL
      • postgreSQL
      • SQLite
    • Clases magistrales
    • Utilidades hechas con Access
  • Access en el mundo
  • ¿Quiénes somos?
  • Cómo colaborar
  • Eventos
✕
            No hay resultados Mostrar todos los resultados
            Access: Active control
            19/01/2022
            Diseño: poner icono a mis formularios
            20/01/2022
            Mostrar todos

            Listbox dinámicos

            Publicado por Antonio Otero
            Categorías
            • Clases magistrales
            Etiquetas
            • Access
            • Listbox
            • VBA

            ¿Qué vamos a ver en esta clase?

            ¿Cómo podemos trabajar rápidamente con dos listbox que van cambiando de forma dinámica?

            En esta clase veremos como cargar un listbox con los datos de una tabla y cómo al seleccionar datos del primer listbox, se transforma un segundo listbox, adaptando su tamaño a los datos que va a contener.

            Para conseguir esto vamos a necesitar un formulario de Access con dos listbox y tantos botones de comando que nos permitirán realizar acciones como ordenar alfabéticamente las columnas.

            Al final de la entrada encontrarás un vídeo de cómo puedes hacerlo y un ejemplo que puedes descargar.

            Los pasos a seguir son:

            1. Creamos un listbox con origen de la fila en «Lista de valores» y dos columnas, con un botón de comando que nos permite cargar el listbox.

            '----------------------------------------------------------------------------------------
            ' Fuente            : https://access-global.net/listbox-dinamicos/
            '----------------------------------------------------------------------------------------
            ' Título            : listbox dinámicos
            ' Autor original    : Antonio Otero
            ' Propósito         : Rellenar listbox con los campos de una trabla, de forma dinámica
            'Coloca este código en el código de tu formulario
            '----------------------------------------------------------------------------------------
            Private Sub Comando2_Click()
            
                Dim dbs As DAO.Database
                Dim tdf As DAO.TableDef
                Dim fld As DAO.Field
                
                Set dbs = CurrentDb
                    Me.l_campos.RowSource = ""
                    Set tdf = dbs.TableDefs("CLIENTES")
                        For Each fld In tdf.Fields
                            Me.l_campos.AddItem fld.Name & ";" & fld.Type
                        Next
                    Set fld = Nothing
                    Set tdf = Nothing
                Set dbs = Nothing
                
            End Sub

            2. Creamos el segundo listbox que será el encargado de mostrarnos los datos de la tabla. Sus características se definen por código.

            Private Sub l_campos_Click()
            Dim lar()
            Dim izqi As String, izq As String
            Dim lanch As String
            Dim i%, e%, b%
            
                lar = Array(500, 4000, 4000, 2000, 2500, 1000)
                
                izqi = Me.Lista4.Left
                izq = izqi
                For i = 1 To 6: Me.Controls("bt" & i).Visible = False: Next i
                With Me.l_campos
                     
                        For e = 0 To .ListCount - 1
                           If .Selected(e) = True Then
                                b = b + 1
                                Me.Controls("bt" & b).Visible = True
                                Me.Controls("bt" & b).Width = lar(e)
                                Me.Controls("bt" & b).Left = izq
                                Me.Controls("bt" & b).Caption = .Column(0, e)
                                izq = izq + lar(e) + 100
                                
                                lanch = lanch & Format((lar(e) + 100) * 0.001763, "0.00") & " cm;"
                               
                           End If
                        
                        Next e
                       If lanch <> "" Then lanch = Left(lanch, Len(lanch) - 1)
                     
                        
                        'MsgBox lanch
              End With
                 If lanch <> "" Then
                    With Me.Lista4
                            .ColumnWidths = lanch
                            .ColumnCount = b
                            .Width = izq - izqi
                         
                    End With
                 End If
                 
                 CARGA_SELECT
                 
            End Sub
            
            Function CARGA_SELECT()
            Dim c As Integer
            Dim SQ As String
            
                For c = 0 To Me.l_campos.ListCount
                    If Me.l_campos.Selected(c) = True Then SQ = SQ & Me.l_campos.Column(0, c) & ","
                Next c
                
                SQ = " SELECT " & Left(SQ, Len(SQ) - 1) & " FROM CLIENTES " & Me.TX_ORDEN
               
                Me.Lista4.RowSource = SQ
                
            End Function
            

            3. Creamos tantos botones de comando como campos de la tabla hay. Los ponemos «no visibles» ya que los iremos visibilizando según representen a campos en la tabla.

            4. Creamos una función para que se active cuando pulsamos cualquiera de los botones.

            'Función que se asocia a cada botón de comando
            Private Function ORDENA()
            Dim c As Integer, b As Integer
            Dim NBT As String, SUF As String
            Dim NCA As String
            
               For c = 0 To Me.l_campos.ListCount
                    If Me.l_campos.Selected(c) = True Then b = b + 1: Me.Controls("BT" & b).Caption = Me.l_campos.Column(0, c)
               Next c
               
               NBT = Me.ActiveControl.Name
               NCA = Controls("" & NBT & "").Caption
               
               If Me.TX_ORDEN = "ORDER BY " & NCA & " ASC" Then SUF = ChrW(9660): Me.TX_ORDEN = "ORDER BY " & NCA & " DESC" Else Me.TX_ORDEN = "ORDER BY " & NCA & " ASC": SUF = ChrW(9650)
               
               Controls("" & NBT & "").Caption = SUF & " " & NCA & " " & SUF
               
               CARGA_SELECT
               
            End Function

            A continuación puedes ver el vídeo con la explicación de todo el proceso.

            Por último, te adjuntamos el ejemplo en Access para que te lo puedas descargar y utilizar en tus aplicaciones.

            Icono

            Listbox dinámicos

            1 archivo(s) 448.20 KB
            ¡Descarga el ejemplo!

            Compartir
            5
            Antonio Otero
            Antonio Otero

            Entradas relacionadas

            04/04/2022

            Drag & Drop en Access


            Leer más
            10/02/2022

            ¿Cómo trabajar con una jerarquía padre-hijo?


            Leer más

            Deja una respuesta Cancelar la respuesta

            Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

            ETIQUETAS

            Access API BD Botones ComboBox Consultas CountOfLines CStr Diseño DoCmd Excel Exportar Fecha FileSystemObject Filtros For Each...Next Formulario Formularios Funciones Funciones de dominio GetFolder GetWindowRect Google maps Informes InStr Kill Left Listbox Mid Módulos Node ProcCountLines Procedimientos ProcOfLine References Replace Ribbon RunCommand Seguridad Split SysCmd Tablas TreeView VBA VBIDE

            ÚLTIMAS ENTRADAS

            • 0
              Tratamiento de errores: otras herramientas útiles
              31/03/2023
            • 0
              Tratamiento de errores: compilación condicional
              30/03/2023

            ¿QUIERES PUBLICITAR TU EMPRESA AQUÍ?

            SUSCRÍBETE A NUESTRO
            NEWSLETTER

            Recibirás información puntual sobre el mundo de Access y VBA

            ¡Próximamente!

            Promovemos el uso de Access y de la programación en VBA en todo el mundo

            Centro de conocimiento


            Toda la sabiduría de los mejores programadores de Access y VBA a tu alcance.

            Legal

            Política de privacidad

            Condiciones de uso

            Condiciones del redactor

            ®Access Global 2021 | All right reserved
                      No hay resultados Mostrar todos los resultados