我创建了一个Excel文件,其中包含一个引用Powerpoint的模块。
我想在没有安装Powerpoint的服务器上使用此文件中的其他模块(长篇故事......),但如果不引起可怕的无法找到项目或库,则无法执行此操作错误消息。
当然我可以简单地删除违规模块创建另一个版本,这显然可以正常工作。
但是,有几个原因导致我不想这样做,尤其是如果我能提供帮助,我真的不想要维护多个版本。
有没有办法解决这个问题,例如:让Excel忽略这个模块,除非被调用,否则不要尝试编译它?
我已经在这个主题上讨论了stackoverflow上的41个帖子,没有发现任何有用的信息,这让我怀疑我在问这个不可能的事情。
有些建议认为后期绑定可能有所帮助,但似乎没有任何区别。这是违规代码:
Dim PowerPointApp As Object
On Error Resume Next
Set PowerPointApp = GetObject(class:="PowerPoint.Application")
Err.Clear
If PowerPointApp Is Nothing Then
Set PowerPointApp = CreateObject(class:="PowerPoint.Application")
End If
On Error GoTo 0
其他模块均未提及Powerpoint。
答案 0 :(得分:2)
有没有办法解决这个问题,例如:让Excel忽略这个模块,除非被调用,否则不要尝试编译它?
您可以尝试条件编译,这几乎就是它的作用。
打开项目属性对话框,并定义项目级条件编译常量:
现在使用#If
指令包装PowerPoint相关模块:
Option Explicit
#If HAS_POWERPOINT = 1 Then
'... entire module body ...
#End If
然后,在任何地方,你都有一段调用有条件编译模块的代码,用#If
指令包围它:
#If HAS_POWERPOINT = 1 Then
MyProcedureThatRunsOffPowerPoint "foo", "bar", 42
#Else
'PowerPoint-dependent module doesn't exist, what do we do instead?
#End If
现在,当您将宏分发到未安装PowerPoint的计算机时,您将转到项目属性并将常量设置为0,然后重新编译项目。