.
Si estás trabajando con listbox quizás quieras aprender más sobre este objeto de VBA para Excel, en el link encontrarás muchos ejemplos que serán de utilidad relacionados con listbox de Excel.
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);
}
}
A la vez que se pasan los datos de un Listbox a Otro Listbox, también se borra de la Hoja1 de Excel que sirve de base de datos para el Listbox1, guardando el dato en la Hoja2 que es la base de datos del Listbox1.
Básicamente la programación del Listbox2 es idéntica a la del Listbox1, solo que Intercambia donde debe copiar y eliminar datos tanto del listbox como de la hoja de Excel que es donde están contenidos los datos que se muestran en el mismo, es por ello que solo se explicará sobre que realiza la macro en el Listbox1 quedando como tarea para los lectores replicar la misma macro, pero en el Listbox2, no obstante el código que se expone está en forma completa para los dos Listbox.
⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛
Quizá sea de utilidad también
Como Exportar desde Excel a TXT de Ancho Fijo
Como Espaciar los Registros en Listbox de Excel
Como Buscar por Cliente Rango de Fechas y Totalizar en el Listbox
Para lograr realizar lo mencionado en el ejemplo se debe primero pasar los datos del Listbox1 al Listbox2, lo cual se logra con los siguientes códigos:
Luego se ordenan los datos en la Hoja2 así:
Luego se busca en la Hoja1 el item correspondiente para eliminarlo, ya que fue guardado en la Hoja2, se usan los siguienes códigos:
Se debe tener presente que se tiene que eliminar el item del Listbox1, para ello se usa el siguiente código:
a.RemoveItem a.ListIndex
En resumen, la macro copia del Listbox1 al Listbox2, copia inmediatamente los registos en la Hoja2, a la vez que busca el mismo dato en la Hoja 1 para elimiarlo, por último elimina el item en el Listbo1; el código completo del Ejemplo de macro llamado Como Eliminar Item al Pasar Datos Listox a Otro Listbox y Guardar Datos en Excel se muestra a continuación y seguidamente se encuentra el link para descarga del ejemplo.
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 ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
Set a = UserForm1.ListBox1
Set b = UserForm1.ListBox2
Set c = Sheets(«Hoja2»)
Set d = Sheets(«Hoja1»)
fila = UserForm1.ListBox1.ListIndex
b.AddItem a.List(fila, 0)
b.List(b.ListCount – 1, 1) = a.List(fila, 1)
b.List(b.ListCount – 1, 2) = a.List(fila, 2)
b.List(b.ListCount – 1, 3) = a.List(fila, 3)
filaedit = c.Range(«A» & Rows.Count).End(xlUp).Row + 1
c.Cells(filaedit, «A») = a.List(fila, 0)
c.Cells(filaedit, «B») = a.List(fila, 1)
c.Cells(filaedit, «C») = a.List(fila, 2)
c.Cells(filaedit, «D») = a.List(fila, 3)
uf = c.Range(«A» & Rows.Count).End(xlUp).Row
r1 = «A1:D» & uf
r2 = «A1:A» & uf
c.Sort.SortFields.Clear
c.Sort.SortFields.Add Key:=Range(r2), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With c.Sort
.SetRange Range(r1)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
uf = d.Range(«A» & Rows.Count).End(xlUp).Row
r1 = «A2:A» & uf
busco = a.List(fila, 0)
Set codigo = Range(r1).Find(busco, LookIn:=xlValues, LookAt:=xlWhole)
If Not codigo Is Nothing Then d.Cells(codigo.Row, «A»).EntireRow.Delete
a.RemoveItem a.ListIndex
End Sub
Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
Set aa = UserForm1.ListBox1
Set bb = UserForm1.ListBox2
Set cc = Sheets(«Hoja2»)
Set dd = Sheets(«Hoja1»)
fila = bb.ListIndex
aa.AddItem bb.List(fila, 0)
aa.List(aa.ListCount – 1, 1) = bb.List(fila, 1)
aa.List(aa.ListCount – 1, 2) = bb.List(fila, 2)
aa.List(aa.ListCount – 1, 3) = bb.List(fila, 3)
filaedit = dd.Range(«A» & Rows.Count).End(xlUp).Row + 1
dd.Cells(filaedit, «A») = bb.List(fila, 0)
dd.Cells(filaedit, «B») = bb.List(fila, 1)
dd.Cells(filaedit, «C») = bb.List(fila, 2)
dd.Cells(filaedit, «D») = bb.List(fila, 3)
uf = dd.Range(«A» & Rows.Count).End(xlUp).Row
r1 = «A1:D» & uf
r2 = «A1:A» & uf
dd.Sort.SortFields.Clear
dd.Sort.SortFields.Add Key:=Range(r2), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With dd.Sort
.SetRange Range(r1)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
uf = cc.Range(«A» & Rows.Count).End(xlUp).Row
r1 = «A2:A» & uf
busco = bb.List(fila, 0)
Set codigo = cc.Range(r1).Find(busco, LookIn:=xlValues, LookAt:=xlWhole)
If Not codigo Is Nothing Then cc.Cells(codigo.Row, «A»).EntireRow.Delete
bb.RemoveItem bb.ListIndex
End Sub
Private Sub TextBox1_Change()
On Error Resume Next
Set b = Sheets(«Hoja1»)
uf = b.Range(«A» & Rows.Count).End(xlUp).Row
If Trim(TextBox1.Value) = «» Then
‘Me.ListBox1.List() = b.Range(«A2:H» & uf).Value
Me.ListBox1.RowSource = «Hoja1!A2:D» & uf
Exit Sub
End If
b.AutoFilterMode = False
Me.ListBox1.Clear
Me.ListBox1.RowSource = Clear
For i = 2 To uf
strg = b.Cells(i, 1).Value
If UCase(strg) Like «*» & UCase(TextBox1.Value) & «*» Then
Me.ListBox1.AddItem b.Cells(i, 1)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 1) = b.Cells(i, 2)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 2) = b.Cells(i, 3)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 3) = b.Cells(i, 4)
End If
Next i
Me.ListBox1.ColumnWidths = «20 pt;90pt;80 pt;80 pt»
End Sub
Private Sub TextBox2_Change()
On Error Resume Next
Set b = Sheets(«Hoja1»)
uf = b.Range(«A» & Rows.Count).End(xlUp).Row
If Trim(TextBox2.Value) = «» Then
‘Me.ListBox1.List() = b.Range(«A2:H» & uf).Value
Me.ListBox1.RowSource = «Hoja1!A2:H» & uf
Exit Sub
End If
b.AutoFilterMode = False
Me.ListBox1.Clear
Me.ListBox1.RowSource = Clear
For i = 2 To uf
strg = b.Cells(i, 2).Value
If UCase(strg) Like «*» & UCase(TextBox2.Value) & «*» Then
Me.ListBox1.AddItem b.Cells(i, 1)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 1) = b.Cells(i, 2)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 2) = b.Cells(i, 3)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 3) = b.Cells(i, 4)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 4) = b.Cells(i, 5)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 5) = b.Cells(i, 6)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 6) = b.Cells(i, 7)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 7) = b.Cells(i, 8)
End If
Next i
Me.ListBox1.ColumnWidths = «20 pt;90pt;80 pt;80 pt»
End Sub
Private Sub UserForm_Initialize()
Dim fila As Long
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Set a = Sheets(«Hoja1»)
Set b = Sheets(«Hoja2»)
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 = 4
.ColumnWidths = «20 pt;90pt;80 pt;80 pt»
‘.RowSource = «Hoja2!A2:» & wc & uf
End With
uf = a.Range(«A» & Rows.Count).End(xlUp).Row
For i = 2 To uf
Me.ListBox1.AddItem a.Cells(i, 1)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 1) = a.Cells(i, 2)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 2) = a.Cells(i, 3)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 3) = a.Cells(i, 4)
Next i
With Me.ListBox2
.ColumnCount = 4
.ColumnWidths = «25 pt;90pt;60 pt;60 pt»
End With
uf = b.Range(«A» & Rows.Count).End(xlUp).Row
For i = 2 To uf
Me.ListBox2.AddItem b.Cells(i, 1)
Me.ListBox2.List(Me.ListBox2.ListCount – 1, 1) = b.Cells(i, 2)
Me.ListBox2.List(Me.ListBox2.ListCount – 1, 2) = b.Cells(i, 3)
Me.ListBox2.List(Me.ListBox2.ListCount – 1, 3) = b.Cells(i, 4)
Next i
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Código que se inserta en un módulo
Private Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
Set a = UserForm1.ListBox1
Set b = UserForm1.ListBox2
Set c = Sheets(«Hoja2»)
Set d = Sheets(«Hoja1»)
fila = UserForm1.ListBox1.ListIndex
b.AddItem a.List(fila, 0)
b.List(b.ListCount – 1, 1) = a.List(fila, 1)
b.List(b.ListCount – 1, 2) = a.List(fila, 2)
b.List(b.ListCount – 1, 3) = a.List(fila, 3)
filaedit = c.Range(«A» & Rows.Count).End(xlUp).Row + 1
c.Cells(filaedit, «A») = a.List(fila, 0)
c.Cells(filaedit, «B») = a.List(fila, 1)
c.Cells(filaedit, «C») = a.List(fila, 2)
c.Cells(filaedit, «D») = a.List(fila, 3)
uf = c.Range(«A» & Rows.Count).End(xlUp).Row
r1 = «A1:D» & uf
r2 = «A1:A» & uf
c.Sort.SortFields.Clear
c.Sort.SortFields.Add Key:=Range(r2), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With c.Sort
.SetRange Range(r1)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
uf = d.Range(«A» & Rows.Count).End(xlUp).Row
r1 = «A2:A» & uf
busco = a.List(fila, 0)
Set codigo = Range(r1).Find(busco, LookIn:=xlValues, LookAt:=xlWhole)
If Not codigo Is Nothing Then d.Cells(codigo.Row, «A»).EntireRow.Delete
a.RemoveItem a.ListIndex
End Sub
Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
Set aa = UserForm1.ListBox1
Set bb = UserForm1.ListBox2
Set cc = Sheets(«Hoja2»)
Set dd = Sheets(«Hoja1»)
fila = bb.ListIndex
aa.AddItem bb.List(fila, 0)
aa.List(aa.ListCount – 1, 1) = bb.List(fila, 1)
aa.List(aa.ListCount – 1, 2) = bb.List(fila, 2)
aa.List(aa.ListCount – 1, 3) = bb.List(fila, 3)
filaedit = dd.Range(«A» & Rows.Count).End(xlUp).Row + 1
dd.Cells(filaedit, «A») = bb.List(fila, 0)
dd.Cells(filaedit, «B») = bb.List(fila, 1)
dd.Cells(filaedit, «C») = bb.List(fila, 2)
dd.Cells(filaedit, «D») = bb.List(fila, 3)
uf = dd.Range(«A» & Rows.Count).End(xlUp).Row
r1 = «A1:D» & uf
r2 = «A1:A» & uf
dd.Sort.SortFields.Clear
dd.Sort.SortFields.Add Key:=Range(r2), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With dd.Sort
.SetRange Range(r1)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
uf = cc.Range(«A» & Rows.Count).End(xlUp).Row
r1 = «A2:A» & uf
busco = bb.List(fila, 0)
Set codigo = cc.Range(r1).Find(busco, LookIn:=xlValues, LookAt:=xlWhole)
If Not codigo Is Nothing Then cc.Cells(codigo.Row, «A»).EntireRow.Delete
bb.RemoveItem bb.ListIndex
End Sub
Private Sub TextBox1_Change()
On Error Resume Next
Set b = Sheets(«Hoja1»)
uf = b.Range(«A» & Rows.Count).End(xlUp).Row
If Trim(TextBox1.Value) = «» Then
‘Me.ListBox1.List() = b.Range(«A2:H» & uf).Value
Me.ListBox1.RowSource = «Hoja1!A2:D» & uf
Exit Sub
End If
b.AutoFilterMode = False
Me.ListBox1.Clear
Me.ListBox1.RowSource = Clear
For i = 2 To uf
strg = b.Cells(i, 1).Value
If UCase(strg) Like «*» & UCase(TextBox1.Value) & «*» Then
Me.ListBox1.AddItem b.Cells(i, 1)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 1) = b.Cells(i, 2)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 2) = b.Cells(i, 3)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 3) = b.Cells(i, 4)
End If
Next i
Me.ListBox1.ColumnWidths = «20 pt;90pt;80 pt;80 pt»
End Sub
Private Sub TextBox2_Change()
On Error Resume Next
Set b = Sheets(«Hoja1»)
uf = b.Range(«A» & Rows.Count).End(xlUp).Row
If Trim(TextBox2.Value) = «» Then
‘Me.ListBox1.List() = b.Range(«A2:H» & uf).Value
Me.ListBox1.RowSource = «Hoja1!A2:H» & uf
Exit Sub
End If
b.AutoFilterMode = False
Me.ListBox1.Clear
Me.ListBox1.RowSource = Clear
For i = 2 To uf
strg = b.Cells(i, 2).Value
If UCase(strg) Like «*» & UCase(TextBox2.Value) & «*» Then
Me.ListBox1.AddItem b.Cells(i, 1)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 1) = b.Cells(i, 2)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 2) = b.Cells(i, 3)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 3) = b.Cells(i, 4)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 4) = b.Cells(i, 5)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 5) = b.Cells(i, 6)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 6) = b.Cells(i, 7)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 7) = b.Cells(i, 8)
End If
Next i
Me.ListBox1.ColumnWidths = «20 pt;90pt;80 pt;80 pt»
End Sub
Private Sub UserForm_Initialize()
Dim fila As Long
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Set a = Sheets(«Hoja1»)
Set b = Sheets(«Hoja2»)
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 = 4
.ColumnWidths = «20 pt;90pt;80 pt;80 pt»
‘.RowSource = «Hoja2!A2:» & wc & uf
End With
uf = a.Range(«A» & Rows.Count).End(xlUp).Row
For i = 2 To uf
Me.ListBox1.AddItem a.Cells(i, 1)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 1) = a.Cells(i, 2)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 2) = a.Cells(i, 3)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 3) = a.Cells(i, 4)
Next i
With Me.ListBox2
.ColumnCount = 4
.ColumnWidths = «25 pt;90pt;60 pt;60 pt»
End With
uf = b.Range(«A» & Rows.Count).End(xlUp).Row
For i = 2 To uf
Me.ListBox2.AddItem b.Cells(i, 1)
Me.ListBox2.List(Me.ListBox2.ListCount – 1, 1) = b.Cells(i, 2)
Me.ListBox2.List(Me.ListBox2.ListCount – 1, 2) = b.Cells(i, 3)
Me.ListBox2.List(Me.ListBox2.ListCount – 1, 3) = b.Cells(i, 4)
Next i
Application.DisplayAlerts = True
Application.ScreenUpdating = True
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