在Excel中运行batch file时,确保在cmd.exe中使用相对path

我有一个Excel文件,带有一个在VB中调用Shell命令的button:

Shell(ThisWorkbook.Path & "\python_script.bat", vbNormalFocus) 

Shell命令调用运行Python脚本的上述batch file:

 python python_script.py 

所有相关的文件(Excel文件,batch file,数据文件,Python文件)都位于同一个目录中,因此我将此文件称为sample_program ,因为我正在为其他人构build这个文件,我打算让它们简单地解压缩它并运行它。

在Excel中,当testing这个,我点击button,然后得到这个错误:

 C:\Users\<user_name>\Documents>python python_script.py python: can't open file 'python_script.py': [Errno 2] No such file or directory 

由于某些原因,虽然所有这些文件都在相同的位置,cmd.exe运行从我的用户目录: C:\Users\<user_name>\Documents

我不希望cmd.exe使用此path; 我希望它使用path\to\sample_program目录。

我如何得到这个使用相对path,所以当我把这个文件夹传给别人,并且把它放在任何地方,它将作为一个独立的单元?

试试这个,如果path\to\sample_program和你的主驱动器在同一个驱动器上

 Shell "cmd.exe /k cd " & ThisWorkbook.Path & "&&python_script.bat" 

或者如果path\to\sample_program与您的主驱动器不在同一个驱动器上,或者您不提前知道

 Shell "cmd.exe /k " & Left(ThisWorkbook.Path, 2) & "&&cd " & ThisWorkbook.Path & "&&python_script.bat" 

你可以使用Environ("username")来获取用户login名,所以对于你的示例(我认为是Windows 7)

 Sub GetDir() MsgBox "C:\Users\" & Environ("username") & "\Documents" End Sub 

您也可以使用SpecialFlder自动检索某些位置,而不pipe操作系统如何

 Sub GetPath() Set wshShell = CreateObject("WScript.Shell") Documents = wshShell.SpecialFolders("MyDocuments") MsgBox Documents End Sub