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

Excel VBA循环内If语句运行崩溃,提示Run-time Error '91'如何解决?

问题核心原因

触发Run-time Error '91'的直接原因:

  • 你声明了wbBook作为工作簿对象变量,但从未对它进行赋值初始化,该变量处于空值状态,调用wbBook.Worksheets时找不到对应对象,直接触发报错。
其他需要修正/可优化的问题
  • 需求明确说明保存路径存放在List工作表的E列,但你代码中读取路径时切换到了PrintQ工作表,会读取到错误路径
  • 存在重复的P72判断逻辑,同一行隐藏操作执行了两次
  • 导出PDF后没有按照需求取消所有隐藏行,下一轮循环会继承上一轮的行隐藏状态
  • 大量使用Select/Selection操作,执行效率低,且容易因工作表切换导致意外错误
  • 所有变量未提前声明,容易因拼写错误引发未知问题
修复后的完整代码
Option Explicit ' 强制变量声明,避免拼写错误
Sub PrintbyDiv()
    Dim I As Integer
    Dim ThisFile As String
    Dim masterSht As Worksheet
    Dim listSht As Worksheet
    
    ' 提前绑定工作表,避免反复切换选择
    Set masterSht = ThisWorkbook.Worksheets("Master")
    Set listSht = ThisWorkbook.Worksheets("List")
    
    I = 189
    Do While I < 197
        ' 直接赋值编号,无需复制粘贴
        masterSht.Range("B8").Value = listSht.Cells(I, 1).Value
        
        ' 刷新公式计算,防止公式未自动更新
        DoEvents
        
        ' 按需隐藏行
        If masterSht.Range("P69").Value = 1 Then masterSht.Rows("68:70").Hidden = True
        If masterSht.Range("P72").Value = 1 Then masterSht.Rows("71:73").Hidden = True
        If masterSht.Range("P75").Value = 1 Then masterSht.Rows("74:76").Hidden = True
        If masterSht.Range("P77").Value = 1 Then masterSht.Rows("77:80").Hidden = True
        If masterSht.Range("P81").Value = 1 Then masterSht.Rows("81:83").Hidden = True
        If masterSht.Range("P84").Value = 1 Then masterSht.Rows("84:86").Hidden = True
        
        ' 读取保存路径
        ThisFile = listSht.Cells(I, 5).Value
        
        ' 导出PDF
        masterSht.ExportAsFixedFormat _
            Type:=xlTypePDF, _
            Filename:=ThisFile, _
            Quality:=xlQualityStandard, _
            IgnorePrintAreas:=False, _
            OpenAfterPublish:=False
        
        ' 导出后取消所有隐藏行,符合需求要求
        masterSht.Rows("68:86").Hidden = False
        
        I = I + 1
    Loop
    
    ' 释放对象
    Set masterSht = Nothing
    Set listSht = Nothing
End Sub
主要修改说明
  • 新增Option Explicit强制变量声明,避免变量拼写错误
  • 提前绑定List和Master工作表对象,取消所有不必要的Select操作,执行效率大幅提升
  • 删除了重复的P72判断逻辑
  • 修正了路径读取的工作表为List,和需求保持一致
  • 新增导出后取消所有行隐藏的逻辑,避免影响下一轮循环
  • 把复制粘贴的赋值操作改为直接单元格赋值,避免剪切板残留问题

内容的提问来源于stack exchange,提问作者Larinda4

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:06:07