【发布时间】:2016-01-25 13:15:57
【问题描述】:
我正在尝试自动生成一些由 Excel VBA 完成所有工作的报告。我的雇主有一套标准化的模板,所有文件都应该从中生成。我需要从 Excel VBA 填充这些模板之一。 Word 模板广泛使用 VBA。
这是(部分)我的 Excel VBA 代码:
Sub GenerateReport() ' (Tables, InputDataObj)
' code generating the WordApp object (works!)
WordApp.Documents.Add Template:="Brev.dot"
' Getting user information from Utilities.Userinfo macro in Document
Call WordApp.Run("Autoexec") ' generating a public variable
Call WordApp.Run("Utilities.UserInfo")
' more code
End sub
在 Word VBA Autoexec 模块中,定义并声明了一个名为 user 的公共变量。来自Utilities 模块的Userinfo 子填充user。这两个例程都在没有任何 VBA 投诉的情况下运行。然后我希望能够访问我的 Excel VBA 中的 user 变量,但我收到以下错误
编译错误:尚未在此上下文中创建变量。
如何在 Excel VBA 中访问 Word VBA 变量?我认为它或多或少是一样的?
编辑:user 变量是用户定义的Type,只有String 属性。复制填充user 变量的 Word VBA 函数是绝对可行的,只是比我认为的需要更多的工作......
【问题讨论】:
-
把
UserInfo变成一个函数,给它一个返回值,可以赋值给Excel中的一个变量 -
@MacroMan
UserInfo内置在模板中,我无法篡改... -
您可以创建自己的 UDF 来返回变量
-
@Holene 如果您可以修改设置全局变量的应用程序的代码(或在开始时将其设置为这样做),这很容易,但在此情况,您似乎无法做到这一点。
-
"UserInfo 内置在模板中,我无法篡改..." 在这种情况下,您无法访问 Word 中生成的信息。但是,“代码也需要在其他计算机上工作,并且模板是为所有工作用户设置的”不需要阻止你。有一些方法可以解决这个问题,不会影响使用代码的其他人,例如写入文档 VARIABLE(这是文档中的字符串存储,没有人可以看到并且不会影响任何内容)。