我怎样才能复制一个表,让我的macros仍然工作?

首先我想道歉,如果我的问题已经在其他地方回答了,因为我花了一些时间search。

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

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

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

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

 ActiveSheet.ListObjects(“Table1619”)。Range.AutoFilter Field:= 1

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

(假设它是工作表中唯一/第一个表格)。