下标超出范围-在另一台计算机上找不到打开的工作簿

时间:2019-12-10 21:24:53

标签: excel vba

我是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

1 个答案:

答案 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