如何修复Excel打印宏:按条件打印指定工作表报错问题
VBA打印宏代码修复方案
原代码的问题
- 缺少
If起始语句就直接用Then,属于语法错误,VBA无法识别条件判断逻辑 - 错误使用
Sheets("Item " & i).ws.Range,ws未定义也未赋值,是无效的对象引用 - 非空判断的
< >中间多了空格,VBA仅认可无空格的运算符<> - 未声明工作表对象变量
ws,不符合代码规范且易引发未知问题
修复后的可用代码
Sub PrintItemSheets() Dim i As Integer Dim ws As Worksheet ' 声明工作表对象变量 For i = 1 To 18 ' 将指定名称的工作表赋值给变量ws Set ws = ThisWorkbook.Sheets("Item " & i) ' 判断BB2单元格非空时执行打印 If ws.Range("BB2").Value <> "" Then ws.PrintOut End If Next i End Sub
额外优化:增加错误防崩逻辑
如果担心存在工作表名称错误、工作表被删除等情况,可以添加错误处理,避免宏直接中断:
Sub PrintItemSheetsWithErrorHandling() Dim i As Integer Dim ws As Worksheet For i = 1 To 18 On Error Resume Next ' 临时开启错误捕获,跳过不存在的工作表 Set ws = ThisWorkbook.Sheets("Item " & i) On Error GoTo 0 ' 恢复正常错误处理机制 ' 确认工作表存在后再判断打印条件 If Not ws Is Nothing Then If ws.Range("BB2").Value <> "" Then ws.PrintOut End If Set ws = Nothing ' 释放对象变量 End If Next i End Sub
内容的提问来源于stack exchange,提问作者Charlie Poat
相关产品推荐
相关产品推荐

