【发布时间】:2019-06-26 20:31:15
【问题描述】:
我在工作簿 A 中有代码可以打开并对工作簿 B 执行操作。当工作簿 A 和 B 是唯一打开的 excel 文件(或者如果工作簿 A 是唯一打开的文件)时,代码运行良好。但是,如果我打开任何其他工作簿(称为工作簿 C),宏将无法正确运行。它不会导致错误消息,它只是运行完成而不做任何它应该做的“东西”(这些东西基本上是在工作簿 B 中找到东西并将它们粘贴到工作簿 A 中)。
FWIW,我做了以下简单的实验:
- 打开所有 3 个工作簿(A、B 和 C)
- 选择工作簿 C,使其处于活动状态并位于前窗口
- 运行代码workbookB.sheet1.activate(这不是逐字逐句的,我知道编写的这段代码会失败)
当我进行上述测试时,它甚至没有使工作簿 B 成为活动工作簿。同样,它不会导致 excel 抛出错误消息,它只是运行并将工作簿 C 保留为活动工作簿。
编辑:我已经测试了更多,下面的代码应该更改工作簿 B 中单元格的值,而是将值放入工作簿 C。我很困惑,因为没有以任何方式引用工作簿 C (该模块位于工作簿 A)
Sub test()
Dim wb As Workbook
Set wb = Workbooks.Open("U:\workbookB.xlsx")
wb.Worksheets("ED").Range("Z1").Value = "TEST"
End Sub
编辑 2:当工作簿 A 和 B 已打开几个小时且工作簿 C 最近打开时,就会出现此问题。我关闭了工作簿 B,然后重新运行了代码,它工作正常。这使我相信多个excel打开实例存在某种问题。尽管希望这是低风险的,但我仍然很好奇是否有人可以通过某种方式对其进行编码以作为预防措施?谢谢!
【问题讨论】:
-
通常不需要
Activate。完全限定您正在使用的工作簿和工作表是您所需要的。 -
BigBen - 请参阅更新。我知道“激活”不是必需的,我只是将它用作一种简单的故障排除方法 - 除了“激活”之外,我还可以使用不同的操作来复制问题。在关闭/重新打开并修复它之后,我想知道是否这是打开多个 excel 实例的错误
-
在“wb”上设置一个监视并检查 FullPath 以确认它确实是您期望的文件。
-
弗兰克 - 这似乎很有帮助,我究竟如何在变量上“设置手表”?谢谢!
-
在
end sub之前的代码中输入debug.print wb.path