Excel VBA隐藏多行范围时触发Runtime '450'错误求助
问题解决:VBA隐藏多行时Runtime '450'错误修复
Runtime '450'错误的核心原因是参数格式不匹配:你给Rows方法传了多个独立的字符串参数(比如Sheets("Sheet2").Rows("21:30", "41:42")),但Rows只支持单个参数。正确的做法是把需要隐藏的所有行范围合并成一个用逗号分隔的字符串,传给Range对象。
同时原代码里的Select和Activate操作完全没必要,直接引用工作表对象更稳定高效。修正后的完整代码如下:
Sub CopySheetsAndHideRows() Dim newWB As Workbook Dim ws As Worksheet '复制指定工作表到新工作簿 Sheets(Array("Sheet1", "Sheet3", "Sheet2", "Sheet4")).Copy Set newWB = ActiveWorkbook '明确引用新生成的工作簿 '批量将新工作簿的工作表内容转为值 For Each ws In newWB.Sheets ws.UsedRange.Copy ws.UsedRange.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False Next ws '隐藏各工作表的指定行 With newWB.Sheets("Sheet1") .Range("21:30,41:42,69:70,76:87").EntireRow.Hidden = True End With With newWB.Sheets("Sheet2") .Range("21:30,41:42,69:70,76:93").EntireRow.Hidden = True End With With newWB.Sheets("Sheet3") .Range("79:90,106:113").EntireRow.Hidden = True End With With newWB.Sheets("Sheet4") .Range("79:96,114:119").EntireRow.Hidden = True End With End Sub
关键修正点:
- 用
newWB变量明确绑定新工作簿,避免和原工作簿混淆 - 遍历工作表批量转值,替代冗余的
Select/Activate操作 - 所有隐藏行操作改用
Range("行范围1,行范围2,...")格式,符合VBA参数要求 - 用
With语句简化工作表引用,让代码更简洁易读
内容的提问来源于stack exchange,提问作者Kris P
相关产品推荐
相关产品推荐

