Excel VBA如何确定它使用的软件产品';当前正在..内运行的。。?

Excel VBA如何确定它使用的软件产品';当前正在..内运行的。。?,excel,ms-access,ms-word,vba,Excel,Ms Access,Ms Word,Vba,许多软件产品都集成了VBA。这当然包括Microsoft Office,但也有许多第三方产品选择包括VBA。快速的谷歌搜索显示了AutoCad、WordPerfect、PowerTerm和ScriptWorx等名称 如果希望使用#If/#EndIf指令来设计在多个环境中工作的子系统或函数,VBA如何检测当前运行的子系统或函数 这与检测是否安装了产品略有不同,在这种情况下,可以使用CreateObject()和ErrorHandler。此外,检查引用集合也不是确定的,因为VBA项目可能有多个对当前

许多软件产品都集成了VBA。这当然包括Microsoft Office,但也有许多第三方产品选择包括VBA。快速的谷歌搜索显示了AutoCad、WordPerfect、PowerTerm和ScriptWorx等名称

如果希望使用#If/#EndIf指令来设计在多个环境中工作的子系统或函数,VBA如何检测当前运行的子系统或函数

这与检测是否安装了产品略有不同,在这种情况下,可以使用CreateObject()和ErrorHandler。此外,检查引用集合也不是确定的,因为VBA项目可能有多个对当前产品以外的产品的引用。例如,Access项目可能引用Excel,反之亦然(就像我的许多人一样)

比如说,我想写一个函数,返回当前文件的名称。下面是一些使用Access和Excel作为示例的伪代码

Public Function CurrentFilename() As String
    #If EnvironmentName="Access" Then
        CurrentFilename = Access.Application.CurrentProject.Fullname
    #ElseIf EnvironmentName="Excel" Then
        CurrentFilename = Excel.Application.ActiveWorkbook.Fullname
    #Else
        MsgBox "Current VBA software environment is not recognized."
    #End If
End Function

这可能吗。。?如果是这样的话,替换“EnvironmentName”的神奇常量或函数是什么?

我相信您最好的选择是
应用程序.Name
属性。我不能确认它适用于所有VBA实现,但它似乎与MS产品一致。
从MSDN参考资料中:

我发现这两篇文章如果不能解决您的问题,可能会让您感兴趣:-您是否研究了
应用程序.Name
属性?我无法确认它在办公产品之外是否有效,但它似乎与MS stuff一致。@Chris Meurer,将其作为一个答案发布。Chris Meurer,这很好。就在我眼皮底下。正如Gordon所说,将其作为答案发布。。!我会投票支持它作为我的解决方案。@David G.我对产品间的沟通有点熟悉;我的主要项目文件中有十几个参考资料。其中之一是更好的Access to Excel exporter版本,它将查询输出到电子表格,因为它的VBA允许Excel格式的完整环境,而不是Access提供的蹩脚内置小部件就在我鼻子底下,哈哈。。!!是的,这适用于Access、Excel和Word。