如何复制工作表并使我的宏仍然有效?

时间:2013-02-15 21:07:23

标签: excel vba

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

我在工作表中使用了两个宏(非常简单的宏......他们过滤了一个表格),这个工作表是一个每周都会使用的模板。当我复制工作表并创建一个新工作表时,宏不再起作用。我收到的错误是运行时错误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"

我所知道的是,如果有一种方法可以在所有工作表上使用相同的表名,但我的有限研究似乎指出了我无法实现的方向。

2 个答案:

答案 0 :(得分:2)

无法像这样引用ActiveSheet.ListObjects.Range("$A$103:$A$113") - 如上所述,或者将表格转换为正常范围,然后使用ActiveSheet.Range("$A$103:$A$113")

答案 1 :(得分:2)

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

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

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