我的文件中有不同的工作表,每个工作表都有相同名称的子程序,每个子程序执行特定于工作表的不同内容所以,我试图使用模块中的Application.Run
动态调用选定工作表内的宏。所有工作表的“对象”名称(我不知道如何调用它们)已经被修改为与其视图(括号内)名称相同,没有空格。
macro = Chr(39) & ThisWorkbook.Name & Chr(39) & "!" & Replace(SheetName, " ", "") & "." & "Harmoniser()"
Application.Run macro
以下是工作表中Harmoniser
宏的示例。
Sub Harmoniser()
ActiveSheet.Range("k22").GoalSeek Goal:=0, ChangingCell:=Range("l13")
MsgBox ("Done!")
End Sub
不知何故,只有MsgBox
有效,并且每次都显示两次。通过设置断点进行调试也不起作用。它发生在我的所有床单上。 Application.Run是否有限制,它只允许某些代码或者Excel没有给我一个错误?
答案 0 :(得分:2)
运行代码时我得到同样的东西。我尝试了一些不同的调整,如果我这样做,我可以进入调试/断点模式:
Sub t()
Dim sht As Worksheet
Dim macro As String
For Each sht In ThisWorkbook.Worksheets
sht.Activate
macro = sht.CodeName & ".Harmoniser"
Application.Run macro
Next
End Sub
您的代码可能因为您使用ActiveSheet
而没有首先激活包含要运行的宏的工作表而无提示错误。不确定MsgBox的双重显示,但似乎可能是相关的。