【发布时间】:2016-02-28 22:30:30
【问题描述】:
我正在开发一个 MS Word 宏,它需要在网络驱动器上打开一个文件,并将调用文件的路径作为参数传递给它(然后我可以使用此方法 http://www.vbaexpress.com/forum/archive/index.php/t-21174.html 在打开的文件中检索参数)。
我想要达到的目标如下:
1. Document X (any MS word document) calls document Y (macro document)
2. Document Y processes document X (using the Document object)
3. Document Y closes
我执行上述第 1 步的原因是,用户不必部署复杂的 vba 代码(我正在与不具备 IT 知识的用户打交道),并且如果需要,可以轻松地对代码进行更新和增强。
以下代码sn -p打开带参数的文件:
Dim currentFilePath As String
currentFilePath = ThisDocument.Path & ThisDocument.Name
Dim MacroFilePath As String
MacroFilePath = ThisDocument.Path & "\Test.docm"
MacroFilePath = """" & MacroFilePath & """" & currentFilePath
Documents.Open (MacroFilePath)
'MacroFilePath' 的值是这样设置的(263 个字符):
“\\XXXXXXXXXXXX\XX_XX\XXX_XXX XXXX procedural documentation\XX Design Support\Macros - DO NOT MOVE\Work in progress\Calling Document.docm” \\XXXXXXXXXXXX\XX_XX\XXX_XXX XXXX procedural documentation\XX Design Support\Macros - DO NOT MOVE\Work in progress\Test.docm
当我运行上述代码时,会出现错误Run-Time '9105': String is long than 255 characters。我已经测试了将文件移动到较短目录的代码并且它可以工作。有没有办法绕过这个或其他方式来实现我想要做的事情?
通过将文档保存在其他地方来缩短文件路径、更改我正在编程的语言或创建任何类型的可执行文件都不是我在企业环境中的选项。
【问题讨论】:
-
@Dirk Vollmar 问题是调用文档会被用户锁定。虽然我可以设计一个允许用户浏览文件并以这种方式处理的宏;这种方法更可取。
-
X打不开Y,然后在Y中调用一个过程,把它自己的路径作为参数传入? msdn.microsoft.com/en-us/library/office/ff838935.aspx
-
@Tim Williams 不知道你的意思,X 以 X 的路径作为参数打开 Y,Y 的 OnLoad 甚至正在运行并检索参数...至于 X 可以直接调用 Y 中的过程吗?据我所知,这在 VBA 中是不可能的。
-
您可以使用 Application.Run from X 来调用 Y 中的过程并将其传递给参数...检查我发布的链接。
-
@Tim Williams 谢谢,成功了!我没有意识到 VBA 有这种能力。如果您在下面添加答案,我会接受它:)