Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在预处理器例程中使用VBA application.statusbar会在编译时导致运行时错误_Vba_Excel_Statusbar_Preprocessor - Fatal编程技术网

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

在预处理器例程中使用VBA application.statusbar会在编译时导致运行时错误,vba,excel,statusbar,preprocessor,Vba,Excel,Statusbar,Preprocessor,我有一些使用预处理器命令的代码:#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 代码在我的机器上运

我有一些使用预处理器命令的代码:
#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
代码在我的机器上运行良好,但在其他机器上,当打开电子表格并编译代码时,会出现一条错误消息:

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

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

我已尝试添加“下一步出错恢复”,但这并不能阻止错误

因此,我似乎无法在预处理器例程中使用statusbar,并确保它能够正常工作

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


有人能解释一下可能发生的事情吗?

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

  • 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
Private Sub DoSomething()
    Application.StatusBar = "updating names..."

    '***other code here****           

    Application.StatusBar = false
End Sub
然后将实际逻辑移动到
DoSomething
,使实际代码不受预编译器指令的影响:

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
Private Sub DoSomething()
    Application.StatusBar = "updating names..."

    '***other code here****           

    Application.StatusBar = false
End Sub

最坏的情况是,Mac用户单击您的按钮将出现编译错误,代码将无法运行。。。但是它无论如何都不应该运行,所以…

“编译时的运行时错误”-这将是编译错误-给出错误消息,这显然不是编译时错误。它发生在运行时,当VBA执行预处理器指令时。如果包含相关的
#预处理器条件,那就太好了。谢谢你纠正我混淆的术语。我已更新以显示所使用的指令。我将尝试此工作簿.Application.statusbar并返回报告。我没有导致错误的电脑,所以我会发电子邮件给那个家伙试试it@Slai错误消息中的
\u应用程序
对象指向正确识别的
应用程序
;如果使用
ThisWorkbook
对其进行限定会改变什么,我会感到惊讶,因为它是完全相同的对象指针。因此,错误与在Mac环境中运行的代码无关,对吗?对。如果它在mac电脑上运行,除了msgbox说它不会做任何事情外,它不会运行任何东西。啊,好主意!它仍然在我的设置中使用您的方法工作,因此我将检查它在失败的一个上的工作情况,并在周一报告。首先,我很好奇是什么原因导致它失败,但还有更大的事情需要担心状态栏!