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
相关产品推荐
相关产品推荐

