2017-03-10 139 views
2

我試圖運行VBA宏來運行PowerShell腳本。通過在-File參數之後放置當前用戶配置文件的完整路徑,我可以使腳本工作。使用環境變量在VBA中打開PowerShell腳本

但是,我需要該腳本適用於所有用戶。

我試過$env:USERPROFILE\Desktop\open\file_merge.ps1,但沒有找到目錄。所以,我去了下面,但我得到一個語法錯誤。任何人都可以協助

Dim retval 

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

回答

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) 
+0

謝謝Ansgar!我很欣賞這個解釋。你每天都會學到新的東西,並且你非常幫助我使用了字符串連接的例子。 –

-1

不是在那裏的最後foulup但

""Environ("USERPROFILE")" &  

似乎缺少一些與符號,如果你想給ENVIRON USERPROFILE傳遞給Powershell的