While循环指定行数:复制每20行到新工作簿遇1004运行时错误
解决VBA复制每20行到新工作簿时的Runtime Error 1004错误
原代码触发Runtime Error 1004的核心问题及修正方案如下:
错误原因
- 行号起始错误:Excel行号从1开始,原代码用
i=0作为起始行,Rows(0)是无效引用,直接触发错误。 - 空行判断逻辑错误:
Rows(i) <> ""的写法无法正确判断整行是否为空,且会在无效行号时抛出异常。 - 复制行数错误:
i & ":" & (i + 20)会复制21行(从i到i+20),不符合每20行的需求。 - 路径格式问题:
"E:" & "NEW-BOOK"的写法可能导致路径识别异常,标准路径应使用\作为分隔符。
修正后的代码
Sub OpenAndSaveNewBook() Dim MyBook As Workbook, newBook As Workbook Dim FileNm As String Dim i As Integer i = 1 ' 从第1行开始,符合Excel行号规则 Set MyBook = ThisWorkbook ' 循环直到当前行第1列无数据(可根据实际情况调整判断列) Do While MyBook.Sheets("Sheet1").Cells(i, 1).Value <> "" FileNm = "E:\NEW-BOOK" & i & ".xls" ' 修正路径格式 Set newBook = Workbooks.Add With newBook ' 复制20行:从i到i+19 MyBook.Sheets("Sheet1").Rows(i & ":" & (i + 19)).Copy .Sheets("Sheet1").Rows("1") ' 保存新工作簿,xlNormal对应xls格式 .SaveAs Filename:=FileNm, FileFormat:=xlNormal, CreateBackup:=False .Close Savechanges:=False End With i = i + 20 ' 每次跳过20行,下一批从i+20开始 Loop End Sub
关键修改说明
- 起始行调整:将
i=0改为i=1,匹配Excel的行号规则。 - 循环终止条件:改用
Cells(i,1).Value <> ""判断第1列是否有数据,避免无效行引用,也可根据实际数据列调整判断的列号。 - 复制行数修正:将
i+20改为i+19,确保每次复制20行。 - 路径格式修正:添加路径分隔符
\,避免保存路径识别错误。
内容的提问来源于stack exchange,提问作者Son Dang
相关产品推荐
相关产品推荐

