显示多列数据的列表框

listbox to show multiple column data

如何让列表框显示设定范围内的数据而不是活动的sheet?

Private Sub UserForm_INITIALIZE()
 With ListBox1

        .ColumnCount = 2
        .ColumnWidths = "50;50"
        .RowSource = Sheet3.Range("B2:C21").Address
    End With
end sub

怎么样

Private Sub UserForm_Initialize()
    With ListBox1
        .ColumnCount = 2
        .ColumnWidths = "50;50"
        .RowSource = "Sheet3!B2:C21"
    End With
End Sub
 Dim Data As Variant
Dim lastrow As Long
lastrow = Sheet3.Cells(Rows.Count, "b").End(xlUp).Row
ListBox1.ColumnCount = 2
ListBox1.ColumnWidths = "50;50"
Data = Sheet3.Range("b2:c" & lastrow)
ListBox1.List = Data

您也可以使用 .List 代替 .RowSource

Private Sub UserForm_Initialize()
    With ListBox1
        .ColumnCount = 2
        .ColumnWidths = "50;50"
        .List = ThisWorkbook.Worksheets("Sheet3").Range("B2:C21").Value
    End With
End Sub

是什么导致了活跃的 sheet 引用?

使用 Address 属性 - 尽管明确解决了项目的 Sheet(代码)名称 Sheet3

    .RowSource = Sheet3.Range("B2:C21").Address

只会分配单元格的范围地址“$B$2:$C$21”,而不是表格工作sheet引用。

要获得完整参考 Sheet3!B2:C21,您可以通过

External 参数 设置为 True
Sheet3.Range("A1:B7").Address(False,False,External:=True)

或在范围地址字符串前加上工作sheet Name加上!

Sheet3.Name & "!" & Tabelle1.Range("A1:B7").Address(False,False)

进一步问题

正如您提到的 错误 70(“权限被拒绝”),您很可能还有进一步 试图将行添加到列表框的代码 .List 属性 并不能很好地结合在一起。

就我个人而言,我会完全不使用 .RowSource 并通过 处理列表框列表,或者使用中间隐藏的 sheet 和您可以操作的行源数据。

.