我是Excel VBA的较新用户。我一直在检查所有其他问题,以尝试解决我的问题。我创建了一个主工作簿,当我运行宏时,该工作簿从3个模板电子表格中复制了信息。在我的计算机上,它可以正常工作。但是,当我们尝试在完全相同的4个工作簿打开的同事的计算机上运行它时,我们遇到了“下标超出范围”错误。
我使用了这篇文章(Out of range error for Windows().Activate)中的以下代码来检查所有打开的工作簿的名称。当我在同事的计算机上运行代码时,仅显示4个(Master.xlsm)打开的工作簿中的一个。在我运行该代码的计算机上,它显示4个打开的工作簿中的4个
dim oBook as workbook
for each obook in workbooks
debug.print ">" & obook.name & "<"
next
下面是我代码中的第一行。它在第一行中断,因为即使我们打开它也找不到模板工作簿。当我们在调试期间在同事的计算机上运行上述代码时,未列出Template1.xlsx工作簿。我不确定出了什么问题,对此将不胜感激。
Sub Copy_To_Master()
Workbooks("Template1.xlsx").Worksheets("1").Range("A65:E104").Copy
Workbooks("Master.xlsm").Worksheets("1").Range("A65:E104").PasteSpecial Paste:=xlPasteValues
End Sub
答案 0 :(得分:0)
我猜您的工作簿是在不同的实例中打开的。您无法控制用户的操作,因此建议您使用VBA打开文件,以便在打开文件时对其进行处理。
Dim templateBook as Workbook
Set templateBook = Workbooks.Open("Template1.xlsx")
通过这种方式,您可以使用templateBook
对象来完成您需要做的所有事情。然后,我将进一步建议您将这些工作簿保留在服务器共享上,以便它们的位置可靠。这样,任何员工都可以运行这些东西,它们都在服务器上运行,而您不必再担心“在我的机器上工作”。
最后,不要使用复制和粘贴。一旦有了工作簿句柄,就可以直接设置值,而无需复制和粘贴。看起来像这样:
masterBook.Worksheets("1").Range("A65:E104").Value = templateBook.Worksheets("1").Range("A65:E104").Value