excel - 下标超出范围 - 在另一台计算机上找不到打开的工作簿
问题描述
我是 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
解决方案
我猜你的工作簿是在不同的情况下打开的。您无法控制您的用户将要做什么,因此我建议您使用 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
推荐阅读
- ios - 如何快速列出我的 iPhone 设备中的所有 pdf 文件
- javascript - 我想使用 java 脚本获取客户端 IP 客户端连接到 LAN 或 WIFI
- javascript - Javascript 删除线
- java - 如何使用枚举序数 queryDSL 创建查询
- python - socket.send 和 socket.sendall() 的区别
- twitter-bootstrap - Vue少加载css“无法读取未定义的属性'分母'”
- c# - 如何使用 C# 将 CSV 文件转换为 Parquet
- html - 使用 Nginx 在 Linux 中的静态文件
- mysql - 在 Centos7 上启动时出现 MySQL 5.7 错误
- javascript - 如何避免在 for 循环完成之前调用 .map 函数?