使用环境变量在VBA中打开PowerShell脚本

时间:2017-03-10 12:29:58

标签: excel vba excel-vba powershell

我正在尝试运行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)

2 个答案:

答案 0 :(得分:3)

$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)

答案 1 :(得分:-1)

不是那里的最后一次,但

""Environ("USERPROFILE")" & 
如果你想将环境USERPROFILE传递给Powershell,

似乎缺少一些&符号