ExcelのマクロからPowerShellスクリプトを呼び出そうとしています。
私は次のように多くの例を見てきました:
retval = Shell("powershell ""C:\MyTest.ps1""", 1)
ただし、これを使用しようとすると、次のようになります。
Sub Connect_01()
Dim x
x = Shell(“powershell.exe ""\\corp\hdq\Path with spaces\PowerShell\Modules\macro01.ps1""", 1)
End Sub
コンパイラエラーが発生します:Syntax error
割り当てを削除すると、引用符の最初のペアでエラーが発生します。Expected: list separator or )"
私はVBAの経験があまりなく、Shell()コマンドの経験もないので、助けていただければ幸いです。
これを行う2つ目の方法があります。 Windows Script HostのExec
method を使用します。
外部PowerShell、コマンドライン、または他のコマンドラインツールから値を読み取ることができるという大きな利点があります。つまり、ExcelとPowershellの間に双方向通信があります。
Sub RunAndGetCmd()
strCommand = "Powershell -File ""C:\path\to\My PS File.ps1"""
Set WshShell = CreateObject("WScript.Shell")
Set WshShellExec = WshShell.Exec(strCommand)
strOutput = WshShellExec.StdOut.ReadAll
Msgbox strOutput
End Sub
コマンドの他の実用的な例は、
strCommand = "ping.exe 127.0.0.1"
strCommand = "Powershell Echo Hello World"
My PS File.ps1
はecho "Hello World"
$x = 1 + 1
echo $x
PowerShellファイルまたはコマンドラインツール内から結果をecho
する限り、PowerShellですべての複雑なことを実行できます。これは、StdOut(標準出力)に書き込むことを意味します。スクリプトが終了すると、ExcelはWshShellExec.StdOut.ReadAll
を使用してすべての値を読み取ります。
スペースを含むパスがExcelからPowerShellに正しく渡されるようにするには、パスを4つの二重引用符で囲みます"powershell -file ""C:\my path\"" "
Run
メソッドとは異なり、Exec
メソッドはコマンドラインウィンドウを非表示にできませんこのスレッドのOP部分では、コードに右括弧がありません。そのため、エラー: '予想:リスト区切り記号または) "'。
x = Shell(、2つのことを試してみてください。1)の前後のスペースを削除してください。 2)&を使用する代わりに、+を使用してみます
1
の代わりにこれを使用してみてください。 1がどこから来たかわからない-
Sub Connect_01()
Dim x as Variant
x = Shell("POWERSHELL.EXE " & "\\corp\hdq\Path with space\PowerShell\Modules\macro01.ps1", vbNormalFocus)
End Sub
または、まとめて除外する-
Sub Connect_01()
Dim x
x = Shell("POWERSHELL.EXE " & "\\corp\hdq\Path with space\PowerShell\Modules\macro01.ps1")
End Sub