【发布时间】:2020-02-10 18:03:02
【问题描述】:
此宏按预期工作,通过批处理输入表上的按钮:
Sub BatchTriggerOFF()
Sheets("Batch Input").Unprotect
Sheets("Batch Input").Range("G3:J3").Value = "Off"
Sheets("SQL LOGIC").Calculate
Sheets("Batch Input").Range("A12").Select
Sheets("Batch Input").Shapes.Range(Array("Group 12")).ZOrder msoSendToBack
Sheets("Batch Input").Protect
End Sub
但是,当从同一工作簿中的不同工作表调用 BatchTriggerOFF 时,宏既不会更改 Range("G3:J3").Value 也不会更改 Shapes.Range(Array("Group 12")).ZOrder msoSendToBack。没有错误信息。
If Sheets("SQL LOGIC").Range("B1") = "On" Then Call BatchTriggerOFF
我尝试过事先取消对 Batch Input 表的保护,弄乱 Sheets("Batch Input").Activate, Sheets("Batch Input").Select,甚至尝试将 BatchTriggerOFF 一行一行的 VBA 直接粘贴到第二个宏,无济于事。
从第二个宏/工作表调用 BatchTriggerOFF 时似乎没有运行的原因是什么?
【问题讨论】:
-
如果您使用
F8单步执行会发生什么? -
您是在
Sheet Module还是Standard module工作?这对这个问题很重要。此外,请避免使用Call,因为它已被弃用;尝试使用Application.Run "macroName", arg1, arg2(使用后期绑定)。 -
切线相关,CodeName: Sheet1 应该对工作表模块是什么以及如何使用它们有所了解。
-
另外,当我尝试
Call SomeInaccessibleProcedure时,我得到“编译错误:子或函数未定义” - 我挑战“没有错误消息”的前提:如果程序不在范围内,则代码无法编译。如果该过程在范围内,则调用该过程。我们需要更多细节。请回答@Cyril 的问题。 -
@Cyril,如果我理解正确,我相信我在标准模块中,因为所有宏都在 Modules 文件夹下。那是对的吗?另外,您对 Call 的评论是说它不适用于所有版本的 Excel 或其他版本吗?