我正在运行代码来创建每日报告,首先我正在使用单元格和偏移量来比较日期,但是那很慢,现在我正在使用数组来改进代码,但是在尝试修改代码时遇到了问题使用一些应用程序功能,首先我尝试了VLookup,然后得到的只是运行时错误'13':类型不匹配。现在,我正在使用Match和Index方法,并且遇到了相同的错误,我似乎找不到我的错误。

我正在传递一个变体数组,我是这样的:

Public wsrgcmes As Variant
Public wshtte As Variant

With Sheets("Resumen general de casos")
    wsrgcmes = .Range(.Cells(1, 2), .Cells(lRow, lCol)).Value
End With


当我尝试执行Application.Index方法时,错误就出现了。

Sub gen_informe()
     temp = Application.Index(wsrgcmes, 0, 1)
End Sub


我仅在调试窗口中运行了此行Application.Index(wsrgcmes, 0, 1),但遇到了相同的错误。变量数组wsrgcmes包含一个具有数字和字符串值的表。我无法获得任何帮助,我非常感激。谢谢!

wbrgc的值:

arrays - Excel VBA运行时错误“13”:将变量数组传递给Application.Index方法时,类型不匹配-LMLPHP

最佳答案

Application.Index对列和行的数量有限制。如果超出此范围,则会遇到类型不匹配错误。所以这可能是问题所在。

有关解决此问题的方法,请参见以下内容:

how-do-i-slice-an-array-in-excel-vba

我不确定当前的限制是多少。它超过65,536行或65,536列。链接中的解决方案实质上是使用数组进行切片,而不是使用Application.Index。

如果您适当地注意@Vityata的答案和索引,则可以确定转为类型不匹配的转折点。在某些情况下,您还可以通过处理块中的列/行以使其低于阈值来解决此问题。我举一个分块工作的示例来解决此问题:Slice array to use index on larger than 65000

您可以完全避免使用Index并使用TimWilliams辅助函数。

使用@TimWilliams帮助函数,您将拥有

Sub test 'your other sub

temp = GetColumn(wsrgcmes,1)

End Sub


Function GetColumn(arr, colNumber)
    Dim arrRet, i As Long
    ReDim arrRet(1 To UBound(arr, 1), 1 To 1)
    For i = 1 To UBound(arr, 1)
        arrRet(i, 1) = arr(i, colNumber)
    Next i
    GetColumn = arrRet
End Function

关于arrays - Excel VBA运行时错误“13”:将变量数组传递给Application.Index方法时,类型不匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49921531/

10-09 17:28