如何在Excel VBA中正确引用RowSource属性的非活动工作表中的表



我正在尝试使用Excel VBA,通过RowSource属性和包含名为Data的非活动Sheet中信息的Table对象,在Userform中填充ListBox。我的代码基本上可以工作,但有一个严重的缺陷:只有当包含带数据的TableSheet处于活动状态(在工作簿中的所有工作表之间选择(时,它才能工作。

我尝试的代码如下:

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)

说明:

  1. Worksheets("Data").Range("Table1[[Column1]:[Column4]]")正确返回对Data工作表的范围引用。.Address(0, 0)只返回该地址的行/列部分(如B2:E5(
  2. 当您将B2:E5写入RowSourse属性时,这将告诉ListBox从ActiveSheet上的地址获取数据
  3. Address(0, 0, ,1)返回一份完全合格的参考资料,包括工作簿和工作表

最新更新