在预处理器例程中使用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环境中禁用宏
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说它不会做任何事情外,它不会运行任何东西。啊,好主意!它仍然在我的设置中使用您的方法工作,因此我将检查它在失败的一个上的工作情况,并在周一报告。首先,我很好奇是什么原因导致它失败,但还有更大的事情需要担心状态栏!