2

首先,如果我的问题已经在其他地方得到解答,我想道歉,因为我确实花了一些时间搜索。

我在一张表中使用了两个宏(非常简单的宏......它们过滤了一个表格),这张表是一个每周都会使用的模板。当我复制工作表并制作新工作表时,宏不再起作用。我收到的错误是运行时错误 9;下标超出范围。我查看了 VBA 代码(我从未真正学习过 VBA),发现它引用了一个表格标题。有没有办法解决这个问题,所以它不引用该特定表,而是该表中包含的单元格?标题名称示例:

ActiveSheet.ListObjects("Table1619").Range.AutoFilter Field:=1

我想从A103:A113. 我试过这个:

ActiveSheet.ListObjects.Range("$A$103:$A$113").AutoFilter Field:=1

这也不起作用,但我收到的错误是不同的。"Run-time error '438': Object doesn't support this property or method"

我知道如果有一种方法可以在所有工作表中使用相同的表名,但我有限的研究似乎将我指向了这不可能的方向。

4

2 回答 2

2

不可能ActiveSheet.ListObjects.Range("$A$103:$A$113")像这样引用 - 在您的第一个示例中如上所述,或者将表格转换为正常范围,然后使用ActiveSheet.Range("$A$103:$A$113").

于 2013-02-15T21:36:13.653 回答
2

您面临的问题是您通过 Table/ListObject 访问 Range - 但 ListObject 在复制期间更改了名称,因为每个 Table 必须具有唯一的名称。解决方案很简单 - 无需使用 ListObject 的名称访问 ListObject,只需使用工作表中的索引即可 - 这不会改变。因此,更换

ActiveSheet.ListObjects("Table1619").Range.AutoFilter 字段:=1

ActiveSheet.ListObjects(1).Range.AutoFilter 字段:=1
(假设它是工作表中唯一/第一个表。)

于 2013-02-15T22:48:41.203 回答