Cargar datos de hoja en un Listbox

Quisiera ayuda con este código para poder complementarlo:

Private Sub UserForm_Initialize()
With ListBox1
.ColumnCount = 15
.ColumnWidths = "60 pt;60 pt;70 pt"
.ColumnHeads = True
End With
ListBox1.RowSource = "RegistroAutoridades"
End Sub

Como dice el titulo, esto carga todos los datos que tengo una hoja, en realidad tengo 36 columnas, pero solo quiero mostrar algunas en especial como por ejemplo (A,B,D,F,G,H,I,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,ZAD,Ae,Af,Ag) no se como implementar esa parte, podrían  ayudarme por favor, gracias.

Pdt.

Esta hoja sigue creciendo de información, no es permanente.

1 respuesta

Respuesta
1

H o l a : Lo que hace el siguiente código es copiar las columnas que necesitas del rango "RegistroAutoridades" y pegarlas en la hoja "Temp", para ello deberás crear una hoja llamada "Temp".

Después de pegar las columnas, la macro calcula el número de columnas, el ancho de las columnas y carga la información en el listbox.

Actualizar en esta parte de la macro el nombre de tu hoja con datos, el nombre del rango y las columnas que quieras mostrar.

    Set h1 = Sheets("Hoja1")                    'Hoja de datos
    Set h2 = Sheets("Temp")                     'hoja temporal
    Set r = h1.Range("RegistroAutoridades")     'nombre de rango de datos
    cols = Array("A", "B", "D", "F", "G", "H", "I", "K", "L", "M", _
                 "N", "O", "P", "Q", "R", "S", "T", "U", "W", "X", _
                 "Y", "Z", "AD", "AE", "AF", "AG")

El código completo:

Private Sub UserForm_Initialize()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Set h1 = Sheets("Hoja1")                    'Hoja de datos
    Set h2 = Sheets("Temp")                     'hoja temporal
    Set r = h1.Range("RegistroAutoridades")     'nombre de rango de datos
    cols = Array("A", "B", "D", "F", "G", "H", "I", "K", "L", "M", _
                 "N", "O", "P", "Q", "R", "S", "T", "U", "W", "X", _
                 "Y", "Z", "AD", "AE", "AF", "AG")
    '
    h2.Cells.ClearContents
    fini = r.Cells(1, 1).Row
    ffin = r.Rows.Count + fini - 1
    numc = UBound(cols) + 1
    j = 1
    For i = LBound(cols) To UBound(cols)
        h1.Range(h1.Cells(fini, cols(i)), h1.Cells(ffin, cols(i))).Copy
        h2.Cells(1, j).PasteSpecial xlValues
        j = j + 1
    Next
    h2.Cells.EntireColumn.AutoFit
    For i = 1 To numc
        cad = cad & Int(h2.Cells(1, i).Width) + 3 & ";"
    Next
    u = h2.Range("A" & Rows.Count).End(xlUp).Row
    c = h2.Cells(fini, h2.Columns.Count).End(xlToLeft).Column
    letra = Evaluate("=SUBSTITUTE(ADDRESS(1," & c & ",4),""1"","""")")
    '
    With ListBox1
        .ColumnCount = numc
        .ColumnWidths = cad
        .ColumnHeads = True
        .RowSource = h2.Name & "!A2:" & letra & u
    End With
End Sub
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Gracias por el dato, y existe alguna manera que discrimine las columnas desde la misma hoja? lo que pasa es que yo cargo desde la hoja Registro para posteriormente modificarlas desde otro formulario, pero al crear una hoja Temp ya no tengo el acceso directo a la fuente de informacion...

gracias.

otra consulta, para que la hoja1 (hoja de datos)?

Tienes que cambiar en mi código "Hoja1" por el nombre de tu hoja que contiene tus datos.

Para hacerlo en la misma hoja tienes que cargar con el método AddItem, pero solamente puedes cargar 10 columnas.

Para modificar un registro de lo que cargaste en el listbox, simplemente tienes que saber el número de fila. En mi ejemplo el número de fila donde empiezan los datos es la fila 2, en la hoja "Temp" la fila es la 2, entonces si selecciono un registro del listbox, le sumo 2 al listindex y de esa forma sé que el registro que estoy modificando es el de la fila 2.

Otra forma de cargar el listbox es con Arreglos, pero es más complicado, lo más práctico es con .RowSource.

Si gustas te voy ayudando con lo siguiente en tu formulario.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas