【问题标题】:Pass Variable from Excel Macro to .vbs file将变量从 Excel 宏传递到 .vbs 文件
【发布时间】:2013-10-25 13:07:08
【问题描述】:

我有一个带有宏的 excel 按钮。该代码只是将工作簿的路径存储在一个可变名称“MyCompletePath”中,然后运行一个 .vbs 文件。代码是:

MyCompletePath = ActiveWorkbook.FullName

'Run VBS file
Shell "wscript C:\Users\name\Desktop\vb.vbs", vbNormalFocus

我想将变量 'MyCompletePath' 从 excel 文件传递​​到使用最后一行执行的文件。

我进行了一些搜索,但并不完全了解他们的解决方案的作用。也许有人可以告诉我该怎么做。

更新/编辑:我现在遇到了 Shell "wscript 之后的文件路径问题。它在文件夹名称中有空格。我怎样才能让它与名称中的空格一起使用?

谢谢。

【问题讨论】:

标签: vba excel vbscript


【解决方案1】:

您可以在 VBS 文件的路径之后包含命令行参数。例如:

Shell "wscript C:\Users\name\Desktop\vb.vbs BlahBlahBlah", vbNormalFocus

然后在您的 VBS 脚本中,您可以使用 WScript.Arguments 集合访问它们。例如:

MsgBox WScript.Arguments(0)

会弹出一个显示“BlahBlahBlah”的消息框。

对于文件路径,如您所指出的,它可能包含空格,因此将被视为脚本的多个参数,我会将参数包含在引号中,如下所示:

Shell "wscript C:\Users\name\Desktop\vb.vbs ""this has multiple words""", vbNormalFocus

【讨论】:

  • 如果我在引号中输入变量名,它会发送变量名而不是它的值,对吗?编辑:是的,引号不能包含变量。只有字符串。有什么办法吗?
  • 你可以这样做:Shell "wscript C:\Users\name\Desktop\vb.vbs """ & strMyPath & """", vbNormalFocus
  • 或者这可能更容易阅读:Shell "wscript C:\Users\name\Desktop\vb.vbs " & Chr(34) & strMyPath & Chr(34), vbNormalFocus。 Chr(34) 返回双引号字符。
【解决方案2】:

基于passing argument from vba to vbs

当我在 vba 中这样写时:

Sub Macro1()

MyCompletePath = "toto"

Shell "wscript D:\\vb.vbs " & MyCompletePath

End Sub

这在 vb.vbs 中

MsgBox("Hello " & WScript.Arguments(0))

我确实得到了“Hello toto”

【讨论】:

  • 工作得很好,唯一的问题是 WScript.Arguments(0) 后面的文本会停在一个空格处,如果你有: MyCompletePath = "to to" MsgBox("Hello " & WScript.Arguments( 0)) 它会在这里返回:“to”
  • roryap 答案提供了解决方案:在每个间隔的参数周围添加转义的双引号,以便将其作为一个一致的整体阅读:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-29
  • 1970-01-01
  • 2014-09-05
  • 2018-03-20
  • 1970-01-01
相关资源
最近更新 更多