在预处理器例程中使用 VBA application.statusbar 会导致编译时出现运行时错误

using VBA application.statusbar in preprocessor routine causes runtime error when compiling

我有一些使用预处理器命令的代码:#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

代码在我的机器上运行良好,但在其他机器上,当打开电子表格并编译代码时,出现错误消息:

这是在受保护的视图中打开电子表格时发生的错误。如果不在受保护的视图中,则不会显示错误。一旦子程序在打开后被调用它就可以正常工作,但是当它在打开时编译时它会失败。

如果我删除状态栏命令,则不会发生错误。

我试过添加 'On Error Resume Next' 但这并不能阻止错误。

看来我无法在预处理器例程中使用状态栏,但确定它会起作用。

我使用 Excel 2016,我在 Excel 2013 上看到了错误。两台机器都是 64 位 windows 8.1,实际上两台机器的规格完全相同 ASUS UX305F核心 M 处理器。

任何人都可以阐明可能发生的事情吗?

我无法重现问题,但假设:

  • Application.StatusBar 在预编译器指令之外工作正常

并且:

  • 预编译器指令仅用于在 Mac 环境中禁用宏

只需稍微重新组织一下,以便在 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 用户点击您的按钮会出现编译错误,代码不会 运行...但它不应该 运行 无论如何,所以...