.
Como es sabido los listbox de Excel solo admiten 10 columnas, pero tranquilos, existe la posibilidad de cargar más de diez columnas en el listbox, ya que muchas veces es preciso tener una cantidad mayor al límite del listbox de Excel.
Si te estás iniciando en la operación de Excel o requieres afirmar conocimientos, recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.
if (payload.eventType == ‘subscribe’) {
// Add code to handle subscribe event.
} else if (payload.eventType == ‘unsubscribe’) {
// Add code to handle unsubscribe event.
}
if (window.console) { // for debugging only
window.console.log(‘YT event: ‘, payload);
}
}
Ya se ha explicado que para poder cargar más de 10 columnas en un listbox de Excel se necesita usar el método RowSource ya que el método AddItem, solo permite cargar en el listbox solamente hasta diez columnas, mientras que con RowSource se pueden rellenar un listbox con muchas más columnas, que las previstas con el método AddItem.
Cuando se inicia el formulario no hay problema, porque establecemos cual es el origen de los datos y se carga en el listbox, con el siguiente código
.RowSource = «Hoja1!A1:» & wc & uf
⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛
Quizá sea de utilidad también
Como LLenar Combobox y Buscar Datos
Como enviar mail con archivo Excel y PDF mediante Outlook con Excel
Como rellenar un pagaré en forma automática Conectar Excel con Word
⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛
⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛
Para proceder a cargar más de diez columnas en un listbox de Excel, vamos a apoyarnos en una hoja de Excel Temporal, es decir la vamos a insertar vamos a guardar los datos filtrados en ella, vamos a establecer el origen de los datos o RowSurce, cargando los resultados del filtro al listbox y por último elimina la hoja temporal, mostrándose en el listbox más de 10 columnas.
La macro en primer lugar va a eliminar una hoja cuyo nombre hemos dado con la macro, posterior a ello inserta una hoja de excel y se otorga el nombre predeterminado, creando luego un objeto con esta hoja, ello se hace con los siguientes códigos:
Para filtrar los datos ya sea por cliente o rango de fechas y guardar temporalmente en le hoja Excel se usa el siguiente fragmento de código
Una vez filtrados los datos y guardados en la hoja temporal se procede a modificar mediante código las propiedades del listbox, en este caso se le otorga una cantidad de 12 columnas, como así también el ancho de cada columna, por último y los más importante se establece el origen de datos o RowSource, de la siguiente manera:
Para finalizar la macro se elimina la hoja, luego de haber cargado los datos en el listbbox de Excel, todo lo mencionado sucede en forma casi instantánea, para evitar movimientos de pantalla se debe usar el siguiente código:
Application.ScreenUpdating = False
En el vídeo encontrarás un tutorial con una explicación más detallada, por lo que sugiero ver el tutorial denominado Como Rellenar Listbox de Excel con más de 10 Columnas, seguidamente se muestra el código completo y en forma posterior están los link de descargas.
Código que se inserta en un Formulario de Excel
‘**************https://macrosenexcel.com **** https://youtube.com/programarexcel*********Private Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub CommandButton2_Click()
On Error Resume Next
Set b = Sheets(«Hoja1»)
uf = b.Range(«A» & Rows.Count).End(xlUp).Row
dato1 = CDate(TextBox2)
dato2 = CDate(TextBox3)
If dato2 = Empty Or dato1 = emtpy Then
MsgBox («Debe ingresar datos para consulta entre rango de fechas»), vbCritical, «AVISO»
Exit Sub
End If
If dato2 < dato1 Then
MsgBox («La fecha final no puede ser mayor a la fecha inicial»), vbCritical, «AVISO»
Exit Sub
End If
b.AutoFilterMode = False
Me.ListBox1 = Clear
Me.ListBox1.RowSource = Clear
‘Elimina hoja y crea hoja dando el mismo nombre que la eliminada
Sheets(«DFSHJFDUYDAYRAIUY544TTTOMYDUTGD»).Delete
ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = «DFSHJFDUYDAYRAIUY544TTTOMYDUTGD»
Set a = Sheets(«DFSHJFDUYDAYRAIUY544TTTOMYDUTGD»)
b.Range(«A1:L1»).Copy Destination:=a.Range(«A1»)
fila = 2
If dato2 < dato1 Then
MsgBox («La fecha final no puede ser mayor a la fecha inicial»), vbCritical, «AVISO»
Exit Sub
End If
For i = 2 To uf
strg = b.Cells(i, 3).Value
dato0 = CDate(b.Cells(i, 4).Value)
If UCase(strg) Like UCase(TextBox1.Value) & «*» And dato0 >= dato1 And dato0 <= dato2 Then
a.Cells(fila, 1) = b.Cells(i, 1)
a.Cells(fila, 2) = b.Cells(i, 2)
a.Cells(fila, 3) = b.Cells(i, 3)
a.Cells(fila, 4) = b.Cells(i, 4)
a.Cells(fila, 5) = b.Cells(i, 5)
a.Cells(fila, 6) = b.Cells(i, 6)
a.Cells(fila, 7) = b.Cells(i, 7)
a.Cells(fila, 8) = b.Cells(i, 8)
a.Cells(fila, 9) = b.Cells(i, 9)
a.Cells(fila, 10) = b.Cells(i, 10)
a.Cells(fila, 11) = b.Cells(i, 11)
a.Cells(fila, 12) = b.Cells(i, 12)
fila = fila + 1
End If
Next i
a.Range(«D:G»).NumberFormat = «dd/mm/yyyy»
uf = a.Range(«A» & Rows.Count).End(xlUp).Row
uc = a.Cells(1, Columns.Count).End(xlToLeft).Address
wc = Mid(uc, InStr(uc, «$») + 1, InStr(2, uc, «$») – 2)
With Me.ListBox1
.ColumnCount = 12
.ColumnWidths = «20 pt; 15pt; 170 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt»
.RowSource = «DFSHJFDUYDAYRAIUY544TTTOMYDUTGD!A1:» & wc & uf
End With
a.Delete
End Sub
Private Sub CommandButton3_Click()
Unload UserForm1
End Sub
Private Sub TextBox1_Change()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
On Error Resume Next
Set b = Sheets(«Hoja1»)
uf = b.Range(«A» & Rows.Count).End(xlUp).Row
If Trim(TextBox1.Value) = «» Then
Me.ListBox1.RowSource = «Hoja1!A1:L» & uf
Me.ListBox1.ColumnCount = 12
Me.ListBox1.ColumnWidths = «20 pt; 15pt; 170 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt»
Exit Sub
End If
b.AutoFilterMode = False
Me.ListBox1 = Clear
Me.ListBox1.RowSource = Clear
dato1 = CDate(TextBox2)
dato2 = CDate(TextBox3)
‘Elimina hoja y crea hoja dando el mismo nombre que la eliminada
Sheets(«DFSHJFDUYDAYRAIUY544TTTOMYDUTGD»).Delete
ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = «DFSHJFDUYDAYRAIUY544TTTOMYDUTGD»
Set a = Sheets(«DFSHJFDUYDAYRAIUY544TTTOMYDUTGD»)
b.Range(«A1:L1»).Copy Destination:=a.Range(«A1»)
fila = 2
For i = 2 To uf
strg = b.Cells(i, 3).Value
If UCase(strg) Like UCase(TextBox1.Value) & «*» Then
a.Cells(fila, 1) = b.Cells(i, 1)
a.Cells(fila, 2) = b.Cells(i, 2)
a.Cells(fila, 3) = b.Cells(i, 3)
a.Cells(fila, 4) = b.Cells(i, 4)
a.Cells(fila, 5) = b.Cells(i, 5)
a.Cells(fila, 6) = b.Cells(i, 6)
a.Cells(fila, 7) = b.Cells(i, 7)
a.Cells(fila, 8) = b.Cells(i, 8)
a.Cells(fila, 9) = b.Cells(i, 9)
a.Cells(fila, 10) = b.Cells(i, 10)
a.Cells(fila, 11) = b.Cells(i, 11)
a.Cells(fila, 12) = b.Cells(i, 12)
fila = fila + 1
End If
Next i
a.Range(«D:G»).NumberFormat = «dd/mm/yyyy»
uf = a.Range(«A» & Rows.Count).End(xlUp).Row
uc = a.Cells(1, Columns.Count).End(xlToLeft).Address
wc = Mid(uc, InStr(uc, «$») + 1, InStr(2, uc, «$») – 2)
With Me.ListBox1
.ColumnCount = 12
.ColumnWidths = «20 pt; 15pt; 170 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt»
.RowSource = «DFSHJFDUYDAYRAIUY544TTTOMYDUTGD!A1:» & wc & uf
End With
a.Delete
End Sub
Private Sub TextBox2_Change()
If Len(UserForm1.TextBox2) = 10 Then UserForm1.TextBox3.SetFocus
End Sub
Private Sub TextBox3_Change()
If Len(UserForm1.TextBox3) = 10 Then UserForm1.CommandButton2.SetFocus
End Sub
Private Sub UserForm_Initialize()
Dim fila As Long
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Set b = Sheets(«Hoja1»)
uf = b.Range(«A» & Rows.Count).End(xlUp).Row
uc = b.Cells(1, Columns.Count).End(xlToLeft).Address
wc = Mid(uc, InStr(uc, «$») + 1, InStr(2, uc, «$») – 2)
With Me.ListBox1
.ColumnCount = 12
.ColumnWidths = «20 pt; 15pt; 170 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt»
.RowSource = «Hoja1!A1:» & wc & uf
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
On Error GoTo Fin
If CloseMode <> 1 Then Cancel = True
Fin:
End Sub
Código que se inserta en un módulo
Private Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub CommandButton2_Click()
On Error Resume Next
Set b = Sheets(«Hoja1»)
uf = b.Range(«A» & Rows.Count).End(xlUp).Row
dato1 = CDate(TextBox2)
dato2 = CDate(TextBox3)
If dato2 = Empty Or dato1 = emtpy Then
MsgBox («Debe ingresar datos para consulta entre rango de fechas»), vbCritical, «AVISO»
Exit Sub
End If
If dato2 < dato1 Then
MsgBox («La fecha final no puede ser mayor a la fecha inicial»), vbCritical, «AVISO»
Exit Sub
End If
b.AutoFilterMode = False
Me.ListBox1 = Clear
Me.ListBox1.RowSource = Clear
‘Elimina hoja y crea hoja dando el mismo nombre que la eliminada
Sheets(«DFSHJFDUYDAYRAIUY544TTTOMYDUTGD»).Delete
ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = «DFSHJFDUYDAYRAIUY544TTTOMYDUTGD»
Set a = Sheets(«DFSHJFDUYDAYRAIUY544TTTOMYDUTGD»)
b.Range(«A1:L1»).Copy Destination:=a.Range(«A1»)
fila = 2
If dato2 < dato1 Then
MsgBox («La fecha final no puede ser mayor a la fecha inicial»), vbCritical, «AVISO»
Exit Sub
End If
For i = 2 To uf
strg = b.Cells(i, 3).Value
dato0 = CDate(b.Cells(i, 4).Value)
If UCase(strg) Like UCase(TextBox1.Value) & «*» And dato0 >= dato1 And dato0 <= dato2 Then
a.Cells(fila, 1) = b.Cells(i, 1)
a.Cells(fila, 2) = b.Cells(i, 2)
a.Cells(fila, 3) = b.Cells(i, 3)
a.Cells(fila, 4) = b.Cells(i, 4)
a.Cells(fila, 5) = b.Cells(i, 5)
a.Cells(fila, 6) = b.Cells(i, 6)
a.Cells(fila, 7) = b.Cells(i, 7)
a.Cells(fila, 8) = b.Cells(i, 8)
a.Cells(fila, 9) = b.Cells(i, 9)
a.Cells(fila, 10) = b.Cells(i, 10)
a.Cells(fila, 11) = b.Cells(i, 11)
a.Cells(fila, 12) = b.Cells(i, 12)
fila = fila + 1
End If
Next i
a.Range(«D:G»).NumberFormat = «dd/mm/yyyy»
uf = a.Range(«A» & Rows.Count).End(xlUp).Row
uc = a.Cells(1, Columns.Count).End(xlToLeft).Address
wc = Mid(uc, InStr(uc, «$») + 1, InStr(2, uc, «$») – 2)
With Me.ListBox1
.ColumnCount = 12
.ColumnWidths = «20 pt; 15pt; 170 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt»
.RowSource = «DFSHJFDUYDAYRAIUY544TTTOMYDUTGD!A1:» & wc & uf
End With
a.Delete
End Sub
Private Sub CommandButton3_Click()
Unload UserForm1
End Sub
Private Sub TextBox1_Change()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
On Error Resume Next
Set b = Sheets(«Hoja1»)
uf = b.Range(«A» & Rows.Count).End(xlUp).Row
If Trim(TextBox1.Value) = «» Then
Me.ListBox1.RowSource = «Hoja1!A1:L» & uf
Me.ListBox1.ColumnCount = 12
Me.ListBox1.ColumnWidths = «20 pt; 15pt; 170 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt»
Exit Sub
End If
b.AutoFilterMode = False
Me.ListBox1 = Clear
Me.ListBox1.RowSource = Clear
dato1 = CDate(TextBox2)
dato2 = CDate(TextBox3)
‘Elimina hoja y crea hoja dando el mismo nombre que la eliminada
Sheets(«DFSHJFDUYDAYRAIUY544TTTOMYDUTGD»).Delete
ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = «DFSHJFDUYDAYRAIUY544TTTOMYDUTGD»
Set a = Sheets(«DFSHJFDUYDAYRAIUY544TTTOMYDUTGD»)
b.Range(«A1:L1»).Copy Destination:=a.Range(«A1»)
fila = 2
For i = 2 To uf
strg = b.Cells(i, 3).Value
If UCase(strg) Like UCase(TextBox1.Value) & «*» Then
a.Cells(fila, 1) = b.Cells(i, 1)
a.Cells(fila, 2) = b.Cells(i, 2)
a.Cells(fila, 3) = b.Cells(i, 3)
a.Cells(fila, 4) = b.Cells(i, 4)
a.Cells(fila, 5) = b.Cells(i, 5)
a.Cells(fila, 6) = b.Cells(i, 6)
a.Cells(fila, 7) = b.Cells(i, 7)
a.Cells(fila, 8) = b.Cells(i, 8)
a.Cells(fila, 9) = b.Cells(i, 9)
a.Cells(fila, 10) = b.Cells(i, 10)
a.Cells(fila, 11) = b.Cells(i, 11)
a.Cells(fila, 12) = b.Cells(i, 12)
fila = fila + 1
End If
Next i
a.Range(«D:G»).NumberFormat = «dd/mm/yyyy»
uf = a.Range(«A» & Rows.Count).End(xlUp).Row
uc = a.Cells(1, Columns.Count).End(xlToLeft).Address
wc = Mid(uc, InStr(uc, «$») + 1, InStr(2, uc, «$») – 2)
With Me.ListBox1
.ColumnCount = 12
.ColumnWidths = «20 pt; 15pt; 170 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt»
.RowSource = «DFSHJFDUYDAYRAIUY544TTTOMYDUTGD!A1:» & wc & uf
End With
a.Delete
End Sub
Private Sub TextBox2_Change()
If Len(UserForm1.TextBox2) = 10 Then UserForm1.TextBox3.SetFocus
End Sub
Private Sub TextBox3_Change()
If Len(UserForm1.TextBox3) = 10 Then UserForm1.CommandButton2.SetFocus
End Sub
Private Sub UserForm_Initialize()
Dim fila As Long
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Set b = Sheets(«Hoja1»)
uf = b.Range(«A» & Rows.Count).End(xlUp).Row
uc = b.Cells(1, Columns.Count).End(xlToLeft).Address
wc = Mid(uc, InStr(uc, «$») + 1, InStr(2, uc, «$») – 2)
With Me.ListBox1
.ColumnCount = 12
.ColumnWidths = «20 pt; 15pt; 170 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt»
.RowSource = «Hoja1!A1:» & wc & uf
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
On Error GoTo Fin
If CloseMode <> 1 Then Cancel = True
Fin:
End Sub
‘**************https://macrosenexcel.com **** https://youtube.com/programarexcel*********
Sub muestra1()
UserForm1.Show
End Sub
⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛
⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛
.
If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.
Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends