WorksheetFunction.Index触发类型不匹配运行时错误13的原因
运行时错误13(类型不匹配)原因分析
问题场景
变量定义:
oTemplateStartRow = 3
arrLast是维度为(1 To 6385, 1 To 6)的数组,我编写代码意图提取该数组的第二列并粘贴到活动工作表的第二列:
Cells(oTemplateStartRow, 2).Resize(UBound(arrLast, 1), 1).Value = WorksheetFunction.Index(arrLast, 0, 2)
运行时触发错误:
类型不匹配 运行时错误13
补充说明:以下测试程序可正常运行,但使用我的变量(arrLast、oTemplateStartRow)时却报错:
Sub PartOfTheArray() Dim ar(1 To 20, 1 To 5) Dim i As Long, j As Long For i = 1 To 20 For j = 1 To 5 ar(i, j) = i + j * 0.01 Next j Next i Cells(1, 1).Resize(20, 1).Value = ar ' 第1列 ' Cells(1, 2).Resize(20, 1).Value = WorksheetFunction.Index(ar, 0, 2) ' 第2列 ' Cells(1, 3).Resize(10, 1).Value = WorksheetFunction.Index(ar, 0, 4) ' 第4列的部分内容 ' Cells(1, 4).Resize(1, 5).Value = ar ' 第1行 ' Cells(2, 4).Resize(1, 5).Value = WorksheetFunction.Index(ar, 7, 0) ' 第7行 ' Cells(3, 4).Resize(1, 3).Value = WorksheetFunction.Index(ar, 9, 0) ' 第9行的部分内容 ' End Sub
错误原因
大数组下
WorksheetFunction.Index的返回格式问题
测试代码的数组只有20行,WorksheetFunction.Index返回的是二维数组,和单元格区域的赋值要求匹配。但当数组行数达到6385行时,WorksheetFunction.Index会返回一维数组,而单元格区域需要二维数组赋值,直接赋值就触发类型不匹配。数组数据类型或维度不符
如果arrLast是从工作表读取的数组,可能存在混合数据类型(比如部分单元格是文本、部分是数值),或者实际维度和声明的(1 To 6385, 1 To 6)不一致(比如原数据区域有空行),导致Index返回的数组无法和单元格区域兼容。
解决方法
- 改用
Application.Index:它处理大数组时会返回正确的二维数组,替换后代码如下:Cells(oTemplateStartRow, 2).Resize(UBound(arrLast, 1), 1).Value = Application.Index(arrLast, 0, 2) - 手动提取数组列:循环生成新的二维数组再赋值,避免函数返回格式问题:
Dim tempArr() As Variant Dim i As Long ReDim tempArr(1 To UBound(arrLast, 1), 1 To 1) For i = 1 To UBound(arrLast, 1) tempArr(i, 1) = arrLast(i, 2) Next i Cells(oTemplateStartRow, 2).Resize(UBound(tempArr, 1), 1).Value = tempArr - 检查数组有效性:确认
arrLast的生成逻辑,确保它是标准的二维Variant数组,无混合数据类型或维度偏差。
内容的提问来源于stack exchange,提问作者orangecoder
相关产品推荐
相关产品推荐

