[英]Why is there a type mismatch in this usage of Application.Index function in excel VBA?
我遇到的問題是存在“類型不匹配”錯誤,此后,“本地窗口”將丟失變量中存儲的值的所有內存。 因此,我無法調試問題的出處。
出現問題之前的初步代碼:
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引起的):
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文件,並且代碼位於“ Compiled
工作表”中: Excel文件
奇怪的是,有時它不允許使用Debug選項,而只是立即結束。 但是,這次調整了i值之后,我可以得到問題的屏幕截圖:
當i
值達到循環上限+1時崩潰。 但是,它應該起作用,因為Min_NDate
和Count
的列數與2 To Total_Rows_Help
相同
使用UBound函數設置了變量i的上限的相同問題:
該錯誤是因為您的INDEX
函數沒有指向您認為的位置。
Index(Min_NDate, i, 0)
將返回索引的ith
行的整個行。 但是,您的Min_NDate數組的LBound是2
。 那就是數組的第一行。
所以Index(Min_Ndate,1,0)
實際上返回Min_Ndate(2,{2-Ubound(Min_NDate,2})
內容,因此, Index(Min_Ndate, Ubound(Min_NDate,1), 0)
將在外部您的實際數組。
您需要調整索引功能中的值。
您的代碼中可能還有其他問題。 調整該條目之后,我發現了另一個實例,其中您對Min_NDate
的引用超出了為該數組確定尺寸的方式。
運行以下代碼可演示我要編寫的內容。 在i=9
,由於與您的代碼相同的原因,下一次“運行”將導致Type Mismatch
錯誤。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.