我正在开发一个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文字用户)以及在需要时更容易对代码进行更新和增强。
以下代码段打开包含参数的文件:
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
当我运行上面的代码时,错误运行时' 9105':字符串超过255个字符。我测试了代码,我将文件移动到一个较短的目录,它的工作原理。有没有办法绕过这种或另一种方式来实现我想要做的事情?
通过将文档保存到别处来缩短文件路径,更改我编程的语言,或创建任何类型的可执行文件都不是我在企业环境中的选项。
答案 0 :(得分:1)
X可以打开Y,然后在Y中调用一个过程并传入它自己的路径作为参数。
您可以使用Application.Run
执行此操作。
请参阅:
https://msdn.microsoft.com/en-us/library/office/ff838935.aspx
以下是该链接的示例:
Dim strTemplate As String
Dim strModule As String
Dim strMacro As String
Dim strParameter As String
strTemplate = InputBox("Enter the template name")
strModule = InputBox("Enter the module name")
strMacro = InputBox("Enter the macro name")
strParameter = InputBox("Enter a parameter value")
Application.Run MacroName:=strTemplate & "." _
& strModule & "." & strMacro, _
varg1:=strParameter