Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何复制工作表并使宏仍能工作?_Excel_Vba - Fatal编程技术网

Excel 如何复制工作表并使宏仍能工作?

Excel 如何复制工作表并使宏仍能工作?,excel,vba,Excel,Vba,首先,我想道歉,如果我的问题已经在其他地方得到了回答,因为我花了一些时间搜索 我在一张工作表中使用两个宏非常简单的宏。。。他们筛选一个表,该表是每周使用的模板。当我复制工作表并创建新工作表时,宏不再工作。我收到的错误是运行时错误9;下标超出范围。我查看了我从未真正学习过的VBA代码,看到它引用了一个表标题。有没有办法解决这个问题,使它不引用那个特定的表,而是引用那个表中包含的单元格?标题名称的示例: ActiveSheet.ListObjects("Table1619").Range.AutoF

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

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

ActiveSheet.ListObjects("Table1619").Range.AutoFilter Field:=1
我想访问A103:A113单元格范围内的数据。我试过这个:

ActiveSheet.ListObjects.Range("$A$103:$A$113").AutoFilter Field:=1
这也不起作用,但我收到的错误不同。运行时错误“438”:对象不支持此属性或方法


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

不可能引用ActiveSheet.ListObjects.Range$a$103:$a$113,就像这样-在您的第一个示例中一样,或者将表转换为正常范围,然后使用ActiveSheet.range$A$103:$A$113。

不可能引用ActiveSheet.ListObjects.range$A$103:$A$113这样的值-如第一个示例中所述,或者将表转换为正常范围,然后使用ActiveSheet。范围$A$103:$A$113。

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

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

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

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

不可能引用ActiveSheet.ListObjects.Range$A$103:$A$113,就像这样-如上所述,或者将表转换为正常范围,然后使用ActiveSheet.Range$A$103:$A$113。这很有效!若你们不介意的话,你们可以把它作为一个答案发布出来,我给你们打分吗?不可能像这样引用ActiveSheet.ListObjects.Range$A$103:$A$113——或者和你们第一个示例中的一样,或者将表转换为普通范围,然后使用ActiveSheet.Range$A$103:$A$113。这很有效!如果你不介意的话,你能把它作为一个答案发布出来吗?我不建议你将一个表转换成一个普通的范围-这些表非常有用,你可以根据需要使用.range或.DataBodyRange访问所有元素。使用sheet.Range和硬编码范围地址会导致将来的错误-当工作表结构更改或表格扩展时@彼得·拉尔伯特我在这里没有什么可以拒绝的,由OP决定哪种最适合他的需要-我知道很多情况下,简单比灵活性更重要,这样的解决方案可以很好地工作。我不建议将表转换为正常范围-这些表非常有用,可以根据需要使用.range或.DataBodyRange访问所有元素。使用sheet.Range和硬编码范围地址会导致将来的错误-当工作表结构更改或表格扩展时@彼得拉尔伯特我在这里没有什么可以拒绝的,这取决于OP来决定哪一个最适合他的需要-我知道很多情况下,简单比灵活性更重要,这样的解决方案可以很好地工作