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

时间:2016-10-14 16:55:29

标签: vba excel-vba statusbar preprocessor excel

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

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

Method 'StatusBar' of object '_Application' failed

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

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

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

因此,我似乎无法在预处理程序例程中使用状态栏,并确保它可以正常工作。

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

任何人都可以了解可能发生的事情吗?

1 个答案:

答案 0 :(得分:1)

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

  • 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用户将收到编译错误,代码将无法运行......但它不应该运行,所以......