我正在尝试使用Excel VBA,通过RowSource
属性和包含名为Data
的非活动Sheet
中信息的Table
对象,在Userform
中填充ListBox
。我的代码基本上可以工作,但有一个严重的缺陷:只有当包含带数据的Table
的Sheet
处于活动状态(在工作簿中的所有工作表之间选择(时,它才能工作。
我尝试的代码如下:
ListBox1.RowSource = Worksheets("Data").Range("Table 1[[Column1]:[Column4]]").Address(0, 0)
问题是,返回的范围没有引用任何Sheet
,它只是类似于B2:E5
,它只是向ListBox1
添加空白行。代码返回的范围应该类似于Data!B2:E5
。我的问题是,我不能只是硬编码。对于示例代码,我简化了引用,但选择从中获取数据的Table
会有所不同(所有这些表都在同一个Sheet
上(。
Address
属性还有其他几个参数。您需要包括外部参数
.Address(0, 0, ,1)
即
ListBox1.RowSource = Worksheets("Data").Range("Table1[[Column1]:[Column4]]").Address(0, 0, ,1)
说明:
Worksheets("Data").Range("Table1[[Column1]:[Column4]]")
正确返回对Data
工作表的范围引用。.Address(0, 0)
只返回该地址的行/列部分(如B2:E5
(- 当您将
B2:E5
写入RowSourse
属性时,这将告诉ListBox从ActiveSheet上的地址获取数据 Address(0, 0, ,1)
返回一份完全合格的参考资料,包括工作簿和工作表