[英]Excel VBA: how to solve Index and Match function type mismatch error
當日期計數器更改時,我在索引和匹配函數中遇到錯誤。 遇到錯誤時,我寫了一條評論。 如果需要,我上傳了我的數據樣本。 范例: http : //s000.tinyupload.com/?file_id = 00243748825638974221
這是代碼:
Sub regionalAverage()
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
' *** change the declaration here ***
Dim aname() As String
Dim rw As Variant
Dim col As Variant
Dim date_ini As Date
Dim date_fin As Date
'create WorkSheet
' *** add Redim here, so the index of the array will start from 1 ***
ReDim aname(1 To 2)
date_ini = #1/1/2008#
date_fin = #1/2/2008#
For j = 1 To 3
For conteo = date_ini To date_fin
For i = 1 To 2
With Sheets(i)
With Application
col = .Match(j, Worksheets(i).Range("F2:F23393"), 0)
rw = .Match(CLng(conteo), Worksheets(i).Range("D2:D23393"), 0)
'error appeas here
aname(i) = .Index(Worksheets(i).Range("H2:H23393"), col, rw)
End With
End With
Next i
' computation
area = 6.429571
Sheets("Output").Activate
Range("A1").Select
ActiveCell.Offset(0, j).Select
colname = Split(ActiveCell(1).address(1, 0), "$")(0)
Columns("" & colname & ":" & colname & "").Select
Selection.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Select
ActiveCell.Value = "=(SUM(" & aname(1) & "," & aname(2) & "))/" & area & ""
Next conteo
Next j
End Sub
當日期更改為1/2/2008時,我會遇到錯誤,該如何解決?
謝謝
由於您使用的是Application.Match
和Variant
數據類型,因此在調用.Match
不會出現Error
,但是如果在搜索范圍/數組中找不到該值,則col
和rw
等變量將包含Error
類型。 。
嘗試將其分配給String
數組aname()
時,此Error
值將導致TypeMismatch
錯誤。
因此,您已經完成一半,只需要進行錯誤處理即可:
col = .Match(j, Worksheets(i).Range("F2:F23393"), 0)
rw = .Match(CLng(conteo), Worksheets(i).Range("D2:D23393"), 0)
If Not IsError(col) and Not IsError(rw) Then
aname(i) = .Index(Worksheets(i).Range("H2:H23393"), col, rw)
Else
' Do something else if there was an error
End If
或者,將Dim aName() as Variant
,但是您可能需要在代碼中的其他地方進一步處理錯誤,以處理放入數組中的錯誤值。
我還觀察到Index
似乎是錯誤的根源, 這里完全不需要它 ,因為:
Index(range_object, row_num, col_num)
實際上與range_object.Cells(row_num, col_num)
因此,我做了:
aname(i) = CStr(Worksheets(i).Range("H2:H23393").Cells(rw, col).Value)
注意:我還假設您最初將rw
和col
放在Index
函數的錯誤位置,並且rw
是ROW號,而col
是COLUMN號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.