【问题标题】:Calling an External VBA from VBScript从 VBScript 调用外部 VBA
【发布时间】:2014-03-26 05:15:56
【问题描述】:

我正在使用一个名为 mathtype 的程序从 Word 文档中提取一些方程式对象。我已经在 VBA 中编写了可以使用他们的 API 完美运行的代码,但我必须将其转换为 VBScript 文件。我已经查看了整个谷歌,但没有找到任何关于如何(如果可能的话)从 VBScript 调用 VBA 库的解决方案。

VBScript 看不到 MathTypeSDK 对象/函数。

如果不可能,我将如何将需要运行的宏封装在全局可用的 word 文件中并从 VBScript 中调用它?

编辑:知道了!不幸的是,下面的方法虽然有帮助,但不适用于我的情况。我发现了一些更接近的东西:将宏嵌入到全局文件中并通过 Word Objects Run 命令调用它。 objWord.Run "Normal.NewMacros.RunMain"

【问题讨论】:

  • 您可以将宏连接到 Word 文档中的“打开”事件,然后从 VBScript 中打开 word 文件。这完全取决于您需要在 VBA 和 VBscript 代码之间进行多少交互。 Mathtype 代码是在 dll 中还是 VBA 插件?
  • 基本上我只需要一个类(我可以在我的 VBScript 中重新定义它)和一个来自“全局模板”VBA 项目的函数(这是令人不安的部分)(VBA 中的引用是.dot)。

标签: vba vbscript ms-word ms-office


【解决方案1】:

这是一种可能对您有用的方法。我测试了这个简单的例子。

文件“Tester.docm”中的类“clsTest”:

Public Sub Hello()
    MsgBox "Hello"
End Sub

类“实例化”被标记为“PublicNotCreatable”。

“Tester.docm”中的模块:

Public Function GetClass() As clsTest
    Set GetClass = New clsTest
End Function

在你的 vbscript 中:

Dim fPath, fName

fPath = "C:\Documents and Settings\twilliams\Desktop\"
fName = "Tester.docm"

Dim wdApp, o

Set wdApp = CreateObject("word.application")
wdApp.visible=true
wdapp.documents.open fPath & fName

Set o = wdApp.Run("GetClass")
o.Hello

Set o=nothing

再一次 - 我只测试了这个简单的例子:你必须根据你的情况调整它并尝试一下。

【讨论】:

    【解决方案2】:

    我想 Word-VBA 不是用来创建可重用的库(用于外部程序)。

    但是,重用现有 Word-VBA 代码的一种方法是使用/m<macroname> 命令行开关通过WScript.Shell.Run 运行Word(有关详细信息,请参阅http://support.microsoft.com/kb/210565/en-us)。这有一个限制,即每次您需要调用特定的宏时,都会再次启动 Word 进程,运行该宏,然后结束。意思是,如果您只需要一次调用 Word.VBA 来执行特定任务,这可能没问题,但如果您需要在 VBScript 和 VBA 宏之间进行大量进程间通信,则应该寻找不同的解决方案。

    【讨论】:

      猜你喜欢
      • 2013-07-12
      • 1970-01-01
      • 2015-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多