【问题标题】:Open a PowerShell script in VBA with environment variable使用环境变量在 VBA 中打开 PowerShell 脚本
【发布时间】:2017-07-31 19:16:50
【问题描述】:

我正在尝试运行 VBA 宏来运行 PowerShell 脚本。我可以通过将当前用户配置文件的完整路径放在-File 参数之后来使脚本工作。

但是,我需要该脚本适用于所有用户。

我试过$env:USERPROFILE\Desktop\open\file_merge.ps1,但没有找到目录。所以,我去了下面,但我收到了一个语法错误。有人可以帮忙吗?

Dim retval

retval = Shell("powershell -ExecutionPolicy UnRestricted -File ""Environ("USERPROFILE")" & "\Desktop\open\file_merge.ps1""", 1)

【问题讨论】:

    标签: vba excel powershell


    【解决方案1】:

    $env:USERPROFILE 只能在 PowerShell 中使用,因此您不能在从其他地方启动的命令行中使用它。

    您的 Shell 语句不起作用,因为您的引用已损坏,并且 VBA(与其他 VB 方言一样)不会扩展字符串中的表达式或变量。使用字符串连接来解决这个问题:

    retval = Shell("powershell -ExecutionPolicy Unrestricted -File """ & _
             Environ("USERPROFILE") & "\Desktop\open\file_merge.ps1""", 1)
    

    不幸的是,您似乎不能直接使用环境变量:

    retval = Shell("powershell -ExecutionPolicy Unrestricted -File ""%USERPROFILE%\Desktop\open\file_merge.ps1""", 1)
    

    但如果你在命令行前面加上cmd /c,它会起作用:

    retval = Shell("cmd /c powershell -ExecutionPolicy Unrestricted -File ""%USERPROFILE%\Desktop\open\file_merge.ps1""", 1)
    

    【讨论】:

    • 谢谢你,安斯加尔!我非常感谢您的解释。你每天都学到新东西,你帮了我很大的忙,我使用了字符串连接的例子。
    【解决方案2】:

    不是最后一次犯规,而是

    ""Environ("USERPROFILE")" & 
    

    如果您想将环境 USERPROFILE 传递给 Powershell,似乎缺少一些 & 符号

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-16
      • 2013-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-05
      • 2017-10-26
      • 1970-01-01
      相关资源
      最近更新 更多