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
相关产品推荐
相关产品推荐

