2014-07-10 44 views
0

我有一個簡單的問題,我無法解決。在A列的Excel工作簿中,我有一組日期。從這組日期我想查找特定的日期(最近的日期)並報告日期的行號。我可以設法找到日期而不是行號。什麼是迄今爲止我所做的是:錯誤在VBA中使用WorksheetfFnction.match

Option Base 1 
Option Explicit 

Sub Macro() 

Dim maxdate As Date 
Dim k As Integer 
Dim row As Integer 

maxdate = WorksheetFunction.Max(Range("A:A")) 

If maxdate < VBA.Date And maxdate > 0 Then 
    row = Application.WorksheetFunction.Match(maxdate, Range("A:A"), 0) 
    k = row 
End If 

If maxdate = 0 Then 
    k = 0 
End If 

End Sub 

當代碼包含行「行= Application.WorksheetFunction.Match()」執行VBA報告錯誤:運行時錯誤「1004」:無法獲取工作表函數類的匹配屬性。

但是,報告了正確的maxdate。我很欣賞任何輸入?

BR,加斯帕

回答

1

MATCH()不喜歡VBA日期。 .................... so:

Option Base 1 
Option Explicit 

Sub Macro() 

Dim maxdate As Date 
Dim k As Long 
Dim row As Long 

maxdate = WorksheetFunction.Max(Range("A:A")) 

If maxdate < VBA.Date And maxdate > 0 Then 
    row = Application.WorksheetFunction.Match(CLng(maxdate), Range("A:A"), 0) 
    If Not IsError(row) Then 
     k = row 
    Else: 
     MsgBox maxdate & " not found!" 
    End If 
End If 

If maxdate = 0 Then 
    k = 0 
End If 
MsgBox k 
End Sub 
+0

也許最好是'Dim row As Variant'並使用Application.Match代替,它可以代替如果未找到搜索字符串,則返回一個錯誤值。然後你可以測試'If IsError(row)...'來處理異常。 –

+0

@DavidZemens好主意!.....................使用**。Find()**方法會有什麼好處嗎? –

+0

另外值得注意的是,如果'行'是整數,這取決於錶行的大小,這可能會引起溢出錯誤:) –