2011-09-09 23 views
0

我目前使用的是最初用于Excel文档的VBA代码。我可以只用零售或代码使用,但我认为扩展应用程序可能会更好,因此它可以与任何MS Office应用程序“可能”兼容。但我不完全知道如何去做。如何检查从哪个Office应用程序VBA代码运行?

例如基于Excel的代码读取该文件的路径:

If libDir = "" Then libDir = ThisWorkbook.Path 

扩展这个字我只是有要的ActiveDocument取代的ThisWorkbook。

但是有可能找出哪个办公应用程序正在运行VBA代码,这样我就可以保留两者。

'IF VBA run from Word Then 
    If libDir = "" Then libDir = ThisWorkbook.Path 
'ELSE VBA run from Excel then 
    If libDir = "" Then libDir = ActiveDocument.path 
'End If 

到目前为止,我可以看到,我可以,如果字找出或Excel是开放的,但我不能假定,因为它是开放的它运行特定的模块。但这超出了我的VBA知识。

我也试过这个currentproject.path但这不起作用。

在此先感谢

+0

哈,谢谢你的评论。如果是这样的话,将不可能,所以我会停止寻找解决方案。呵呵 – Mallow

回答

1

这听起来复杂试图工具代码,以便适应不同的Office应用程序。如果它可以在word和excel中应用,那么这段代码会做什么 - 也许vbscript,然后自动化你想要使用的对象是一个选项

就你上面的具体例子来说,它实际上可以编译好吗(我有在xl2003,xl2010和word2010中进行了测试),因此如果出现错误处理,代码将运行并跳过其他有问题的区域。

On Error Resume Next 
    If libDir = "" Then libDir = ThisWorkbook.Path 
    If libDir = "" Then libDir = ActiveDocument.Path 
On Error GoTo 0 

有其他要考虑的事情,如果文件未保存,路径将不存在。

2

我发现自己需要这个,并努力找到任何形式的条件编译或其他手段来区分应用程序。

就在现在,我发现每个Office应用程序中的Application对象都有.Name和.Version字符串属性。

所以,你可以做一些代码,像这样来确定你下运行的应用程序:

Private Sub TestApplication() 
    Select Case Application.Name 
    Case "Microsoft Word" 
     MsgBox "Running in Word " + Application.Version 
    Case "Microsoft Excel" 
     MsgBox "Running in Excel " + Application.Version 
    Case "Microsoft PowerPoint" 
     MsgBox "Running in PowerPoint " + Application.Version 
    Case "Microsoft Visio" 
     MsgBox "Running in Visio " + Application.Version 
    Case "Microsoft Access" 
     MsgBox "Running in Access " + Application.Version 
    Case "Outlook" 
     MsgBox "Running in Outlook " + Application.Version 
    Case Else 
     MsgBox "Unknown Application " + Application.Name + " " + Application.Version 
    End Select 
End Sub 
3

如果总的想法是建立和重新使用VBA代码库,可以用在所有Office应用程序更好的方法可能是使用条件编译。然后,前两种情况在上面的例子TestApplication是这样的:

Private Sub TestApplication() 
    #If Word then 
     MsgBox "Running in Word " + Application.Version 
    #ElseIf Excel 
     MsgBox "Running in Excel " + Application.Version 
    #Else 
     MsgBox "Running in SomeOtherApplication " + Application.Version 
    #End if Case "Microsoft PowerPoint" 
End Sub 

(所有其他应用程序已经陷入与#ELSE)

通过设置条件编译参数“字”和“Excel中'在包含重用代码的VBProject的属性中是合适的,那么可以确保只编译该实现所需的代码。例如需要在Word中使用条件编译参数为:


字= -1:Excel的= 0


也就是说,字=真:Excel的=假,是需要设置将代码编译到Word特定的应用程序中。

最后一个常规提示:
在设置条件编译参数的值时,始终使用-1作为True。如果您稍后决定颠倒陈述的意图,那么通过添加NOT可以很容易地改变意图。这是一个好主意,因为:

正如您可能知道的那样,VBA条件语句将条件语句中的非零值视为true。例如这将GoTo标签行10:
If 5 Then GoTo LINE10
这是确定的,直到你试图改变这样的声明的意图,不基于这样的条件做某事。这个声明仍然会到第10行。
If NOT 5 Then GoTo LINE10
NOT运算符不会将除-1以外的任何数字解析为False(即0)。

相关问题