簡體   English   中英

為什么在Excel VBA中,這種Application.Index函數的用法類型不匹配?

[英]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值之后,我可以得到問題的屏幕截圖: 1

2

i值達到循環上限+1時崩潰。 但是,它應該起作用,因為Min_NDateCount的列數與2 To Total_Rows_Help相同

使用UBound函數設置了變量i的上限的相同問題:

3

4

該錯誤是因為您的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM