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

Excel VBA遍历行赋值时遇运行时错误'13'类型不匹配求助

错误分析与修正代码

错误原因

出现「Run time error '13' type mismatch」的核心问题及其他代码缺陷:

  • 错误使用Set关键字:Set用于给对象变量赋值,而单元格的Value是属性,直接赋值即可,不需要Set,这是触发类型不匹配错误的直接原因。
  • k变量逻辑错误:k=2被放在每行处理的开头,导致每次处理新行都会从A2开始覆盖内容;且内层循环中k未递增,同一行的所有值都会写入同一个单元格。
  • 未限定工作表:Range和Cells方法未指定工作表,默认使用活动表,若活动表不是数据所在的Sheet5,会引发数据读取错误。
  • 列字母转换不可靠:Chr(Count + 64)仅适用于列号≤26的情况,列号超过26时会生成无效的列标识,建议直接使用行列索引访问单元格。

修正后的VBA代码

Sub LoopthroughRows()
    Dim wsSource As Worksheet, wsTarget As Worksheet
    Dim lastRow As Long, firstRow As Long
    Dim firstColumn As Long, lastColumn As Long
    Dim i As Long, countCol As Long, k As Long
    
    ' 指定源工作表和目标工作表
    Set wsSource = ThisWorkbook.Worksheets("Sheet5")
    Set wsTarget = ThisWorkbook.Worksheets("Sheet7")
    
    firstRow = 2
    firstColumn = 15 ' O列
    k = 2 ' 目标A列起始行
    
    ' 获取源数据最后一行(限定在Sheet5的O列)
    lastRow = wsSource.Range("O" & wsSource.Rows.Count).End(xlUp).Row
    
    Do Until i > lastRow
        i = i + 1 ' 先递增再处理,避免跳过firstRow
        ' 获取当前行的最后一列(限定在Sheet5)
        lastColumn = wsSource.Cells(i, wsSource.Columns.Count).End(xlToLeft).Column
        
        countCol = firstColumn
        Do Until countCol > lastColumn
            ' 直接赋值,去掉Set,使用Cells索引访问更可靠
            wsTarget.Cells(k, 1).Value = wsSource.Cells(i, countCol).Value
            countCol = countCol + 1
            k = k + 1 ' 每写入一个值,目标行号递增
        Loop
    Loop
End Sub

关键修改说明

  • 明确指定源工作表wsSource和目标工作表wsTarget,避免活动表切换导致的错误。
  • 移除Set关键字,直接给单元格Value赋值,解决类型不匹配问题。
  • 将k的初始化移到外层循环外,且在内层循环中每次写入后递增,保证A列依次向下填充。
  • 使用Cells(row, column)的索引方式访问单元格,替代列字母转换,避免列号超过26时的错误。
  • 调整i的递增逻辑,确保从firstRow开始遍历每一行。

内容的提问来源于stack exchange,提问作者Cookiemonster

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:39:33