【问题标题】:MS Word VBA - open file with parameters, string longer than 255 chractersMS Word VBA - 打开带有参数的文件,字符串长度超过 255 个字符
【发布时间】: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 有这种能力。如果您在下面添加答案,我会接受它:)

标签: vba macros ms-word


【解决方案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

【讨论】:

  • 请说明您是如何测试此解决方案的。当我使用大于 256 个字符的路径对其进行测试时,使用“Application.Run”会产生相同的路径长度错误消息。并且关于最大路径的 MS 文档似乎表明它不应该工作,请参阅:Maximum Path Length Limitation(向下滚动)。
  • @Roberto 我得到最大文件路径错误的最初原因是因为当我将它传递给 Documents.Open 时,我连接了 2 个文件路径(要打开的文件 + 当前文件地址)它因错误 9150 而崩溃。现在我使用 Documents.Open 打开文件(我的问题中的文档 Y),然后使用 Application.Run 以文档 X 的文件路径作为参数调用文档 Y 中所需的方法。
猜你喜欢
  • 1970-01-01
  • 2012-06-01
  • 2011-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多