You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 10:40:17