首页 > 解决方案 > 远程连接上的 VBA Shell

问题描述

如果我在 C 驱动器上的本地计算机上运行此代码,则此代码有效。但是,如果我在登录到同一台远程计算机的会话中尝试从远程计算机上的电子表格运行它,则不会发生任何事情。它本身不会崩溃,只是不会产生任何东西。

...
Call RunCmd("python37 get_eff_req_data.py HPBoiler_RunMgr_v00.txt")
...

Sub RunCmd(cmd)
    Dim wsh As Object
    Set wsh = VBA.CreateObject("WScript.Shell")
    Dim waitOnReturn As Boolean: waitOnReturn = True
    Dim windowStyle As Integer: windowStyle = 1
    
    ChDir ThisWorkbook.Path
    Call wsh.Run(cmd, windowStyle)
End Sub

如果我在电子表格目录中远程计算机上的 PowerShell 窗口中运行该确切的命令行,它工作正常。也许这是一个因素,具有此宏的电子表格位于 D 驱动器上,而 Python 位于远程计算机的 C 驱动器上?但是为什么它在 Powershell 中运行良好呢?我会说,当 VBA 宏尝试运行 shell 时,它会打开常规的 DOS 命令提示符,而不是 Powershell,当我自己打开命令提示符时,它会转到另一个驱动器,即 H 驱动器。我无法从命令提示符访问 D 驱动器,但我已确认 Python 将在 H.

标签: pythonexcelvbapowershellshell

解决方案


供参考

ChDir ThisWorkbook.Path 

仅当当前目录与您尝试设置的路径位于同一驱动器上时才有效。如果它在不同的驱动器上,那么您首先需要调用ChDrive以设置正确的驱动器。

命令提示符不会将目录更改为另一个驱动器


推荐阅读