从VBA调用Python脚本出现运行时错误91:对象变量未设置
问题排查与修复方案
核心错误原因
你遇到的「运行时错误91」是因为**objShell变量仅声明但未实例化**,直接调用Run方法会触发该错误。同时命令行参数拼接格式错误,会导致Python无法正确识别传入的参数。
分步修复
1. 实例化Shell对象
在调用Run方法前,必须先创建Shell对象实例:
Set objShell = CreateObject("WScript.Shell")
2. 正确拼接命令行参数
命令中各部分(Python解释器、脚本路径、URL、文件名)必须用空格分隔,且路径或参数包含空格/特殊字符时,需用双引号包裹:
- Python脚本路径包含空格,要加双引号
- URL包含
&这类特殊字符,必须用双引号包裹,避免被系统当成命令分隔符 - 最终命令格式应为:
"Python路径" "脚本路径" "URL" "文件名"
修复后的完整VBA代码
Sub Dw_table() Dim url As String Dim file_name As String Dim PythonExe As String, PythonScript As String Dim objShell As Object Dim cmd As String ' 提示用户输入URL和文件名 url = InputBox("Enter the URL of the table:") file_name = InputBox("Enter the file name:") ' 路径配置(脚本路径含空格,需加双引号) PythonExe = """C:\Users\Mario Rdz\AppData\Local\Programs\Python\Python311\python.exe""" PythonScript = """C:\Users\Mario Rdz\PycharmProjects\HelloWorld\JDEREF.py""" ' 拼接命令行,各参数用空格分隔,URL和文件名也加双引号 cmd = PythonExe & " " & PythonScript & " """ & url & """ """ & file_name & """" ' 实例化Shell对象并执行命令 Set objShell = CreateObject("WScript.Shell") objShell.Run cmd, vbNormalFocus, True ' vbNormalFocus显示窗口,True等待脚本执行完成 ' 释放对象 Set objShell = Nothing End Sub
额外优化建议(Python代码部分)
你的Python代码存在重复创建工作簿和工作表的冗余代码,虽不影响运行,但可删除重复行:
# 删除以下重复代码 # workbook = openpyxl.Workbook() # worksheet = workbook.active
内容的提问来源于stack exchange,提问作者MaBeto76
相关产品推荐
相关产品推荐

