首页 > 解决方案 > 下标超出范围 - 在另一台计算机上找不到打开的工作簿

问题描述

我是 Excel VBA 的新用户。我一直在这里检查所有其他问题以尝试解决我的问题。我创建了一个主工作簿,它在我运行宏时从 3 个模板电子表格中复制信息。在我的电脑上,它可以正常工作。但是,当我们尝试在打开完全相同的 4 个工作簿的同事的计算机上运行它时,我们遇到了“下标超出范围”错误。

我使用这篇文章中的以下代码(Windows().Activate 的超出范围错误)来检查所有打开的工作簿的名称。当我在同事的计算机上运行代码时,仅显示 4 个 (Master.xlsm) 打开的工作簿中的 1 个。在我的计算机上,当我运行该代码时,它会显示 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

标签: excelvba

解决方案


我猜你的工作簿是在不同的情况下打开的。您无法控制您的用户将要做什么,因此我建议您使用 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

推荐阅读