excel vba - propiedades - Listbox se establece en Null de alguna manera en la forma de usuario excel-vba
userform excel pdf (1)
Por extraño que parezca, hay dos clases llamadas ListBox
de diferentes bibliotecas, y VBA las confunde (lo mismo se aplica a todos los controles en realidad). Depende de si está utilizando los controles MSForms
o los controles ActiveX
.
En su caso, debe desambiguar con MSForms.ListBox
que es el tipo real de su listbox.
Sub loadList(list As MSForms.ListBox, id As Integer)
'' ^^^^^^^
Para evitar tales dudas, también puede usar la list As Object
, (haría que su sub maneje ambos tipos siempre que use solo los métodos comunes).
Contexto: estoy codificando un formulario de usuario que tendrá algunos filtros para ejecutar un procedimiento y completar una hoja de trabajo con el valor de retorno.
Estoy teniendo problemas con uno de mis filtros. Pude reproducir mi problema en una versión reducida. Este filtro debe cargar datos en un cuadro de lista basado en la opción del cuadro combinado seleccionado:
No cambié el nombre, los componentes son: UserForm1
, ListBox1
y ComboBox1
.
Mi código roto (comentado):
Option Explicit
''sub that fill data in the list box columns
Sub loadList(list As ListBox, id As Integer)
list.Clear
If (id > 0) Then
list.AddItem
list.Column(0, 0) = "Item 1"
list.AddItem
list.Column(0, 1) = "Item 2"
End If
End Sub
''event that will trigger the loadList sub
Private Sub ComboBox1_Change()
Dim id As Integer
id = ComboBox1.ListIndex
loadList ListBox1, id
End Sub
''the combo options is auto initialized
Private Sub UserForm_Initialize()
ComboBox1.AddItem
ComboBox1.Column(0, 0) = "Option 1"
ComboBox1.AddItem
ComboBox1.Column(0, 1) = "Option 2"
End Sub
Cuando configuro un punto de encuentro, puedo ver el problema. ListBox1
se establece en Null
, pero no sé cómo evitarlo:
El error dice:
Error "13" en tiempo de ejecución: no coincide con el tipo
Pero es obvio porque el ListBox1
se establece en Null
alguna manera.
¿Alguien ha experimentado este comportamiento antes? ¿Cómo solucionarlo? Gracias por adelantado.