【问题标题】:Can I pass a VBA variable into a called Powershell script?我可以将 VBA 变量传递到调用的 Powershell 脚本中吗?
【发布时间】:2013-06-06 18:12:12
【问题描述】:

我有一个 Powershell 脚本可以合并到 Excel VBA 宏中。请参考这个问题: Powershell Regex: Replace only multiple spaces with tabs

这是有问题的代码 Convert_To_Tab_Delimited.ps1:

gc 'foo.txt'| % { $_ -replace '  +',"`t" } | set-content "<my path>\temp.txt"

我需要让 'foo.txt' 成为我传递给它的 VBA 变量。基本上是从 VBA 中的选择文件对话框中获得的路径字符串。此语句将调用 Powershell 文件:

Shell(“powershell.exe -ExecutionPolicy Unrestricted <pathname>\Convert_To_Tab_Delimited.ps1″, 1)

有没有办法将字符串变量作为参数传递给被调用的 Powershell 脚本?对此的任何帮助将不胜感激!

【问题讨论】:

    标签: powershell excel vba


    【解决方案1】:

    您只需要在脚本顶部定义参数:

    param([string]$path)
    $content = [IO.File]::ReadAllText($path)
    # etc.
    

    在VBA中,需要传递参数:

    Shell("powershell.exe -ExecutionPolicy Unrestricted -File <pathname>\Convert_To_Tab_Delimited.ps1 -path """ & pathVariable & """", 1)
    

    【讨论】:

    • 哇,我有一些阅读要做!所以你会在 VBA 代码中使用 & 号而不是“+”号?
    • @LawrenceKnowlton 我承认我已经很久没有做过 VBA 了,我不得不仔细检查一下。我想任何一个都可以在这里工作。这个答案表明你会更喜欢&amp;:stackoverflow.com/a/1727709/517852
    • 啊,太好了!听起来使用 & 连接字符串更容易避免问题!谢谢!
    • 任何想法为什么我似乎无法传递参数,就像 PS 脚本运行但没有做任何事情一样。
    • @LawrenceKnowlton 两个想法:1) Bypass 不是 ExecutionPolicy 的有效值。我想你的意思是不受限制。 2)如果您传递的路径包含空格,则需要引用它。我已经修改了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 2021-08-14
    • 2019-11-22
    • 2018-02-28
    相关资源
    最近更新 更多