基于单元格值设置行号:VBA打印代码报错排查
VBA动态行范围打印报错修复方案
核心问题点
- 语法错误:原代码里
.Range.Row("1 :" & rng)是错误写法,Range对象不能通过这种方式调用Row方法拼接范围,正确的方式是直接使用Range("起始行:结束行")的字符串格式。 - 行号取值错误:你需要的是
Selector工作表R19单元格内的数值(50),但原代码用.Row取的是该单元格所在的行号(19),应该改为.Value来获取单元格内的内容。
修正后的完整代码
Sub Print_Other() Dim rng As Integer Dim a As Variant a = Sheets("SAP").Range("J3").Value rng = Sheets("Selector").Range("R19").Value ' 改为获取单元格内的数值,而非单元格所在行号 With Worksheets("Selection to Print") .Range("1:125").EntireRow.Hidden = True ' 隐藏所有行 .Range("1:" & rng).EntireRow.Hidden = False ' 正确拼接行范围,取消目标行隐藏 .PrintOut From:=1, To:=a ' 打印指定页码范围 .Range("1:125").EntireRow.Hidden = False ' 恢复所有行可见 End With End Sub
可选优化:增加错误校验
如果担心单元格输入非数字或超出范围导致报错,可以添加简单的校验逻辑:
Sub Print_Other() Dim rng As Integer Dim a As Variant ' 校验SAP工作表J3的页码是否有效 If Not IsNumeric(Sheets("SAP").Range("J3").Value) Then MsgBox "SAP表J3请输入有效数字作为页码" Exit Sub End If a = Sheets("SAP").Range("J3").Value ' 校验Selector工作表R19的行号是否有效 If Not IsNumeric(Sheets("Selector").Range("R19").Value) Then MsgBox "Selector表R19请输入有效数字作为结束行号" Exit Sub End If rng = Sheets("Selector").Range("R19").Value If rng < 1 Or rng > 125 Then MsgBox "结束行号需在1-125之间" Exit Sub End If With Worksheets("Selection to Print") .Range("1:125").EntireRow.Hidden = True .Range("1:" & rng).EntireRow.Hidden = False .PrintOut From:=1, To:=a .Range("1:125").EntireRow.Hidden = False End With End Sub
内容的提问来源于stack exchange,提问作者Lumpyness
相关产品推荐
相关产品推荐

