How to Use VBA To Run a Powershell Command and Get Return Value

If you need to interface with some sort of external command line program during your macro, you may want to do that using powershell as you normally would if you were running the program using the command line yourself. Once run, you may need to obtain a result from this command. I recently had to do this myself when working with the Google Translate API using VBA. This is easy to do in VBA. Checkout the below example, using a PowerShell command from VBA to get the user’s free disk space.

Sub RunPowershell()

Set wShell = CreateObject("WScript.Shell")
Set wShellResult = wShell.Exec("powershell (Get-Volume -DriveLetter C).SizeRemaining")

' Change to StdErr.ReadAll to read an error response
MsgBox wShellResult.StdOut.ReadAll

End Sub

That’s it! It’s actually very easy to interface with Powershell from VBA.