我有一些使用预处理器命令的代码:#If
,#Else
和#End If
基本上我已经
了#If Mac then
msgbox "Can't update the list when running on a mac"
#Else
Application.StatusBar = "updating names..."
***other code here****
Application.StatusBar = false
#End if
代码在我的机器上运行正常,但在其他代码上,当打开电子表格并编译代码时,会出现一条错误消息:
在受保护的视图中打开电子表格时发生错误。如果不在受保护的视图中,则不会显示错误。一旦sub打开后调用它就可以正常工作但是当它在打开时进行编译时会失败。
如果我删除状态栏命令,则不会发生错误。
我尝试添加' On Error Resume Next'但这并不能阻止错误。
因此,我似乎无法在预处理程序例程中使用状态栏,并确保它可以正常工作。
我使用Excel 2016,我在Excel 2013上看到了错误。这两台机器都是64位Windows 8.1,实际上两台机器都是与核心M处理器完全相同的ASUS UX305F规格。
任何人都可以了解可能发生的事情吗?
答案 0 :(得分:1)
我无法重现这个问题,但假设:
Application.StatusBar
在预编译器指令之外正常工作和
稍微重新组织一下,以便在Windows环境中运行的代码不在中包含在预编译器指令中:
Public Sub Macro1()
#If Mac Then
MsgBox "Can't update the list when running on a Mac"
Exit Sub
#Else
DoSomething
#End If
End Sub
然后将实际逻辑移到DoSomething
,使实际代码不受预编译器指令的影响:
Private Sub DoSomething()
Application.StatusBar = "updating names..."
'***other code here****
Application.StatusBar = false
End Sub
最糟糕的情况是,单击按钮的Mac用户将收到编译错误,代码将无法运行......但它不应该运行,所以......