VBA从指定单元格循环到最后非空单元格报类型不匹配如何修复
问题修复方案
错误根本原因
- 你当前代码中
LastCell = .Cells(.Rows.Count, "G").End(xlUp)默认读取的是G列最后一个非空单元格的内容,也就是你提到的"AB12345"类字符串,将其作为For循环的终止值时,数字和字符串类型不匹配自然会报错。 - 你实际需要获取的是最后一个非空单元格的行号,只要在取值时追加
.Row属性即可。
修正后的完整代码
Dim wsList As Worksheet Dim wsCode As Worksheet Dim i As Long ' 循环计数器统一用Long类型更规范 Dim j As Long Dim LastRowG As Long ' 变量名改得更易懂,存G列最后非空行号 Dim LastRowF As Long ' 存F列最后非空行号 ' 这里记得先给wsList和wsCode赋值,比如Set wsList = ThisWorkbook.Worksheets("列表"),否则会报对象变量未设置错误 With wsList LastRowG = .Cells(.Rows.Count, "G").End(xlUp).Row ' 追加.Row取行号 LastRowF = .Cells(.Rows.Count, "F").End(xlUp).Row End With ' 额外加个判断,避免列内只有表头没有数据时循环报错 If LastRowG >= 2 Then For i = 2 To LastRowG ' 直接从行号2开始循环,不用Offset(i-1)写法更直观 wsList.Range("G" & i).Copy _ wsCode.Range("C2").Offset((i - 2) * 14) Next i End If If LastRowF >= 2 Then For j = 2 To LastRowF wsCode.Range("F11").Offset((j - 2) * 14).Value = _ wsList.Range("F" & j).Value Next j End If End Sub
额外优化说明
- 原代码中你没有给
wsList和wsCode两个工作表对象赋值,运行时会抛出对象变量未设置错误,记得补上Set赋值语句,比如Set wsList = ThisWorkbook.Worksheets("你要的工作表名") - 循环直接用行号遍历写法更清晰,不容易算错Offset的偏移量
- 增加行号判断逻辑,避免对应列只有表头没有有效数据时出现空循环或者下标越界错误
内容的提问来源于stack exchange,提问作者actuarial.codes
相关产品推荐
相关产品推荐

