Mostrar datos de una sola columna de una hoja en un listbox de excel

Me pueden aclarar un poco más de acurdo a un proyecto que tengo y quisiera sacar los datos de una sola columna de cierta hoja en este caso particular sera "HOJA2" que me muestre los datos solo de la columna "B" y no toda la fila como lo tengo en el proyecto

Option Explicit
Dim a As Variant
Sub FilterData()
  Dim txt1 As String
  Dim i As Long, j As Long, k As Long
  '
  ReDim b(1 To UBound(a, 1), 1 To UBound(a, 2))
ListBox2.Clear
  For i = 1 To UBound(a, 1)   'linea que mellega al ultimo registro
    If txtbuscaproR.Value = "" Then txt1 = a(i, 1) Else txt1 = txtbuscaproR.Value
    If LCase(a(i, 2)) Like "*" & LCase(txt1) & "*" Then 'linea que me lleva a la columna requerida
      j = j + 1
      For k = 1 To UBound(a, 2)
        b(j, k) = a(i, k)
        If k = 4 Or k = 5 Then
          b(j, k) = Format(b(j, k), "$ #,##0.00")
        End If
      Next
    End If
  Next i
  If j > 0 Then ListBox2.List = b
  End Sub
Private Sub UserForm_Activate()
a = Sheets(Hoja3.Name).Range("A2:B" & Sheets(Hoja3.Name).Range("A" & Rows.Count).End(3).Row).Value
 ListBox2.ColumnCount = UBound(a, 2)
End Sub
Private Sub UserForm_Initialize()
a = Sheets(Hoja3.Name).Range("A2:B" & Sheets(Hoja3.Name).Range("A" & Rows.Count).End(3).Row).Value
' ListBox2.ColumnCount = UBound(a, 2)
'a = Sheets(Hoja2.Name).Range("A2").Row.Count
'
 With ListBox2
 .List = a
 .ColumnCount = Worksheets(Hoja3.Name).Range("A2").CurrentRegion.Row.Count
'
 End With
End Sub

1 Respuesta

Respuesta
1

Por lo que veo en el código.

Tienes el evento activate e initialize. Borra todo el evento activate.

Utiliza initialize. Necesitas cargar el listbox solamente una vez cuando inicia el listbox.

En el mismo evento initialize:

.columncount = 2

.ColumnWidths = "0pt; 60pt"

Quedo perfecto master pero me gustaría conocer más sobre esta línea .ColumnWidths = "0pt; 20pt" le cambio números y no afecta en nada pero si la quito me aparecen 2 columnas "A:B" penseba que esta línea era para dar margen a una columna nada más de antemano muchas gracias!

Lo que hace el código es cargar todo en una matriz, en esta parte:

a = Sheets(Hoja3. Name). Range("A2:B" & Sheets(Hoja3. Name).Range("A" & Rows. Count).End(3). Row).Value

En la siguiente línea pasa toda la matriz al listbox:

. List = a

Lo que hago en estas líneas, es decirle al listbox que va a tener 2 columnas.

La primer columna con ancho 0, es decir, no se muestra. Y la segunda con un ancho de 60.

.columncount = 2
.ColumnWidths = "0pt; 60pt"

De esa manera, muestra solamente una columna, en este caso la columna B.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas