You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 07:42:03