在 sheet 打开之前,列表框无法获取数据

List Box unable to fetch data until that sheet is open

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

所以在我不打开 sheet2 之前,listbox2 无法根据要求从 sheet2.But 获取数据,用户需要在其他 sheet 上。

虽然相同用户窗体的列表框 1 通过从相同的 Sheet2 中获取列表运行良好。通过以下代码,

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

Range.Address(External:=True) 将 return 成为完全合格的参考。

ListBox2.RowSource = ssheeet.Columns((X + 1) + 4).Address(External:=True)

使用 Application.Intersect 您可以轻松地 trim Range 仅包括列的已用部分。

Dim Target As Range

With ThisWorkbook.Sheets("Sheet2")
    Set Target = Intersect(.Columns((x + 1) + 4), .UsedRange)
    If Not Target Is Nothing Then
        ListBox2.RowSource = Target.Address(External:=True)
    End If
End With

或者您可以像下面这样设置列表 属性...

Private Sub ListBox1_Click()
    Dim Target As Range
    Dim X As Integer
    Dim ssheeet As Worksheet
    Set ssheeet = ThisWorkbook.Sheets("Sheet2")
    X = ListBox1.ListIndex
    With ThisWorkbook.Sheets("Sheet2")
        Set Target = Intersect(.Columns((X + 1) + 4), .UsedRange)
        If Not Target Is Nothing Then
            ListBox2.List = Target.Value
        End If
    End With
End Sub