Why is there a type mismatch in this usage of Application.Index function in excel VBA?
我遇到的问题是出现"类型不匹配"错误,此后,"本地窗口"将丢失变量中存储的值的所有内存。因此,我无法调试问题的出处。
出现问题之前的初步代码:
1 2 3 4 5 6 7 8 9 10 11 12 | Dim i as Long, j as Long, g as Long Dim Total_Rows_Help as Long Total_Rows_Help = Worksheets("Help Worksheet").Range("A" & Rows.Count).End(xlUp).Row ReDim Min_NDate(2 To Total_Rows_Help, 2 To Total_Rows_Help) As Variant For i = LBound(Min_NDate, 1) To UBound(Min_NDate, 1) For j = LBound(Min_NDate, 2) To UBound(Min_NDate, 2) Min_NDate(i, j) = Worksheets("Help Worksheet").Cells(i, 2) - Worksheets("Help Worksheet").Cells(j, 2) Next j Next i |
问题围绕这些循环集发生(循环和代码一直工作到出错的某个点。我认为这是由于Application.Index引起的):
1 2 3 4 5 6 7 8 | ReDim Count(2 To Total_Rows_Help, 2 To Periods - 1) As Variant For i = LBound(Min_NDate, 1) To UBound(Min_NDate, 1) If Application.Large(Application.Index(Min_NDate, i, 0), Periods - 1) < 0 Then For g = LBound(Count, 2) To UBound(Count, 2) Count(i, g) = Application.Large(Application.Index(Min_NDate, i, 0), g) Next g End If Next i |
下面是附加的excel文件,代码位于
Excel文件
奇怪的是,有时它不允许使用Debug选项,而只是立即结束。但是,这次调整了i值后,我可以得到问题的屏幕截图:
它撞上了
使用UBound函数设置了变量i的上限的相同问题:
该错误是因为您的
1 | Index(Min_NDate, i, 0) |
将返回索引
但是,您的Min_NDate数组的LBound为
因此,
您需要调整索引功能中的值。
您的代码中可能还有其他问题。
调整该条目后,我发现了另一个实例,其中您对
运行以下代码可演示我要编写的内容。 在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | Option Explicit Sub marine() Dim v(2 To 10, 2 To 5) Dim i As Long, j As Long Dim w Dim s As String 'Populate the array For i = 2 To 10 For j = 2 To 5 v(i, j) = i * j Next j Next i 'Examine the contents For i = 2 To 10 'contents of the array s ="" For j = 2 To 5 s = s & vbLf & v(i, j) Next j s ="Array contents with i =" & i & s & vbLf & vbLf 'Output of the index function with the same arguments w ="Output of Index Function with i =" & i & vbLf & Join(Application.Index(v, i, 0), vbLf) MsgBox s & w Next i End Sub |