Excel VBA调用Python脚本无法访问文件,但直接运行Python脚本正常
问题解决:VBA调用Python脚本无法找到目标Excel文件
问题核心原因:
直接运行Python脚本时,脚本的工作目录是它自身所在的文件夹,因此用相对路径Sales_Values.xlsx能正常定位文件;但VBA通过Shell调用时,默认工作目录是Excel的默认启动路径(比如系统「我的文档」文件夹),和Python脚本所在目录不一致,导致相对路径失效。
解决方案
方案1:Python脚本中使用动态绝对路径
避免硬编码路径,自动获取脚本所在目录拼接目标文件路径:import os # 获取当前Python脚本所在文件夹的绝对路径 script_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接目标Excel文件的完整路径 Control = os.path.join(script_dir, "Sales_Values.xlsx") xldata = pd.read_excel(Control, engine='openpyxl')方案2:VBA中先切换工作目录再调用
在执行Shell命令前,先切换到Python脚本所在目录:Dim pythonScriptPath As String Dim scriptDir As String ' 替换为你的Python脚本实际路径 pythonScriptPath = "C:\YourFolder\your_python_script.py" ' 提取脚本所在目录 scriptDir = Left(pythonScriptPath, InStrRev(pythonScriptPath, "\")) ' 切换工作目录到脚本所在文件夹 ChDir scriptDir ' 调用Python脚本(若python未加入环境变量,需写完整路径如"C:\Python39\python.exe") Shell "python """ & pythonScriptPath & """", vbNormalFocus方案3:通过CMD命令指定工作目录
利用CMD的切换目录命令,一次性完成目录切换与脚本执行:Dim pythonScriptPath As String pythonScriptPath = "C:\YourFolder\your_python_script.py" Dim cmdCmd As String ' 先切换到脚本目录,再执行Python脚本 cmdCmd = "cmd /c cd /d """ & Left(pythonScriptPath, InStrRev(pythonScriptPath, "\")) & """ && python """ & pythonScriptPath & """" Shell cmdCmd, vbNormalFocus
内容的提问来源于stack exchange,提问作者HG73
相关产品推荐
相关产品推荐

