避免"无法找到项目或图书馆"在没有安装app的计算机上

时间:2017-01-25 15:21:06

标签: excel vba excel-vba

我创建了一个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。

1 个答案:

答案 0 :(得分:2)

  

有没有办法解决这个问题,例如:让Excel忽略这个模块,除非被调用,否则不要尝试编译它?

您可以尝试条件编译,这几乎就是它的作用。

打开项目属性对话框,并定义项目级条件编译常量:

Project Properties dialog

现在使用#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,然后重新编译项目。