【发布时间】:2019-11-03 07:59:10
【问题描述】:
(为我糟糕的英语提前道歉:不是第一语言:)) 我正在编写一个 VBA Excel 2003 例程,它在一个文件中运行 50 多个工作表,一个接一个地复制工作表(就像一个临时副本),然后在删除这些临时副本并返回它的计算结果之前对它们执行操作工作表内容。 更准确地说:代码是从一个外部文件调用的,内部有一个(隐藏的)工作表。当我打开文件时,它会运行一个代码来在 Excel 中创建一个新工具栏,当我按下工具栏上的一个按钮时,我上面描述的代码就会运行。
我知道不保存文件并执行许多副本会触发此错误,但现在它在第一次尝试时触发(我已关闭并重新打开所有内容多次以确保我没有保留未保存的情况我)。
这是触发问题的代码,抱歉格式不好:
ActiveWorkbook.Worksheets("NAME OF THE FIRST WORKSHEET I WANT TO COPY").Copy ThisWorkbook.Worksheets("HiddenSheet")
声明:工作表的名称由 For..Next 循环通过 ActiveWorkbook.Worksheets 数组找到,但即使我自己硬编码名称,代码也不起作用。
为了更清楚,这里有一大段代码:
Set sourceWorkbook = ActiveWorkbook
For index = 1 To sourceWorkbook.Worksheets.Count
sourceWorkbook.Activate 'not sure if this is even needed
Set currWorksheet = sourceWorkbook.Worksheets(index)
currWorksheet.Copy ThisWorkbook.Worksheets("HiddenSheet")
Next index
结果现在是一致的:
运行时错误“1004” 工作表类的复制方法失败。
提前感谢大家的帮助!
【问题讨论】:
-
您是要复制工作表还是工作表的内容?两者的语法略有不同,您似乎将它们稍微混淆了。
-
嗯,这可能是由几件事引起的,首先要确保您要复制的工作表确实存在。另外,如果您确定确实如此。确保它存在于当前的 ActiveWorkbook 中。活动工作簿可能会根据它周围的代码而改变。确保不要使用
.Select和.Activate来更确定当前工作簿是什么。见这里How to avoid using Select in Excel VBA。也可能是 HiddenSheet 不存在。检查那个也存在。 -
@erazorv4 如果工作表不存在,您可能会在 对
Copy的链式调用之前出现 Index Out of Range 错误 --ActiveWorkbook.Worksheets("sheet name")将失败.所以工作表必须存在。但是有些东西不允许复制。 -
或者
ThisWorkbook受保护? -
@BigBen 是正确的。
Copy方法没有“目的地”。您正在使用Before参数,因此它试图将您复制的工作表之前粘贴到ThisWorkbook中名为"Hidden Sheet"的现有工作表中。
标签: excel vba excel-2003 office-2003