如何根据 Excel - VBA 用户表单中的另一个列表框选择动态地获取列表框内容?

How to have List Box contents dynamically depending on another List Box Selection in Excel - VBA user forms?

我有主要数据(非静态数据可能会在其他 运行 时间模块期间发生变化) 在一列中,然后我有主列的每个元素的列。

假设 A 是主要的,那么如果 A 有 3 个元素,那么列 B 、 C 和 D 将是具有各种数据行的辅助列。

在用户表单中,我有两个列表框 1 和 2。如果用户在 ListBox1 中选择第二个元素,ListBox2 将显示 "C" 列的内容。

Private Sub ListBox1_Click()
Dim X As Integer
Dim vCol As Variant
Dim srange As Range
Dim ssheeet As Worksheet
Set ssheeet = ThisWorkbook.Sheets("Sheet2")
X = ListBox1.ListIndex
Me.ListBox1.List = ssheeet.Columns(X + 1).Values* 
             '2nd selection i.e., 2+1 gives 3rd -> "C" column 
End Sub

Private Sub UserForm_Initialize()
Dim ssheeet As Worksheet
Set ssheeet = ThisWorkbook.Sheets("Sheet1")
Me.ListBox1.RowSource = "Sheet1!A:A"
End Sub

查询 ?

Me.ListBox1.List = ssheeet.Columns(X + 1).Values 在我必须为第二个列表框提供动态范围的地方不起作用。 谢谢!

这应该有效:

Private Sub ListBox1_Click()
    Dim X As Integer
    Dim vCol As Variant
    Dim srange As Range
    Dim ssheeet As Worksheet
    Set ssheeet = ThisWorkbook.Sheets("Sheet2")
    X = ListBox1.ListIndex
    Me.ListBox2.RowSource = ssheeet.Columns(X + 1).Address
End Sub

只能将一个数组压入List属性,所以就

Private Sub ListBox1_Click()
    Dim X As Integer
    Dim vCol As Variant
    Dim srange As Range
    Dim ssheeet As Worksheet
    Set ssheeet = ThisWorkbook.Sheets("Sheet2")
    X = ListBox1.ListIndex

    Dim myArray() as variant
    myArray = ssheeet.Columns(X + 1).Values
    Me.ListBox2.List = myArray
End Sub

我已经测试了这个方法,它将包括 Blank 在内的所有值都推送到 ListBox2 中。不太好,除非我们先确定数据范围。