2013-03-08 76 views
0

我有一個包含多個工作表的工作簿。除彙總表外,其他所有工作表都有一個連續單元格(列內)的動態範圍,用於存儲某些日期格式的值。我需要動態選擇該範圍並選擇最大日期值。該函數應該返回該值。返回類型爲Excel的自定義Excel VBA函數

這是我試圖:

Function GetMSDate(Counter As Integer, DesignCtrs() As String, NumOfVendors() As Long, 
      MSDesc() As String, PlanOrActual As String) As Date 
    GetMSDate = Application.Max(ThisWorkbook.Worksheets(Counter + 1).Range("A:A") 
      .Find(PlanOrActual, SearchOrder:=xlByColumns, searchDirection:=xlNext) 
      .EntireRow 
      .Find(MSDesc(1), SearchOrder:=xlByColumns, searchDirection:=xlNext) 
      .Offset(1, 0).Address & ":" & _ 
      ThisWorkbook.Worksheets(Counter + 1).Range("A:A") 
      .Find(PlanOrActual, SearchOrder:=xlByColumns, searchDirection:=xlNext) 
      .EntireRow 
      .Find(MSDesc(1), SearchOrder:=xlByColumns, searchDirection:=xlNext) 
      .Offset(NumOfVendors(Counter) + 1, 0).Address) 
    MsgBox GetMSDate 
End Function 

我的意圖是,我會定義動態構建範圍爲Application.Max()說法。這樣做,找到範圍錨,我選擇正確的表(Counter+1允許正確);然後在第一列中找到特定的「預定義」字符串;選擇找到的單元格的整行並在該範圍內找到另一個預定義的字符串;的範圍內,然後從該錨小區下面的單元定義爲一個偏移定義:NumOfVendors(Counter)+1

在運行上述,它給我:

類型不匹配誤差在「GetMSDate =」語句。

回答

1

要進行調試,請將您的值分配給變量變量,然後在賦值後輸出該變量的typename()。它應該告訴你爲什麼它不接受日期。

Function GetMSDate(Counter As Integer, DesignCtrs() As String, NumOfVendors() As Long, MSDesc() As String, PlanOrActual As String) As Date 
    Dim v as Variant 

    v = Application.Max(ThisWorkbook.Worksheets(Counter + 
     1).Range("A:A").Find(PlanOrActual, SearchOrder:=xlByColumns, 
     searchDirection:=xlNext).EntireRow.Find(MSDesc(1), SearchOrder:=xlByColumns, 
     searchDirection:=xlNext).Offset(1, 0).Address & ":" & _ 
    ThisWorkbook.Worksheets(Counter + 1).Range("A:A").Find(PlanOrActual, 
     SearchOrder:=xlByColumns, searchDirection:=xlNext).EntireRow.Find(MSDesc(1), 
     SearchOrder:=xlByColumns, searchDirection:=xlNext).Offset(NumOfVendors(Counter) 
     + 1, 0).Address) 
    debug.print v 
    debug.print TypeName(v) 
    stop 
    MsgBox GetMSDate 
End Function 
+0

調試的輸出在哪裏?.....編輯:對不起,我的即時窗口隱藏在後面。所以這些值是0和雙倍 – user1931485 2013-03-08 19:09:59

+0

如果我打印GetMSDate作爲聲明代替v作爲Variant,它將打印12:00:00 AM和Date。我在想這意味着Max()函數沒有按照我預期的那樣進行評估。 – user1931485 2013-03-08 19:55:33

+0

我建議分解你的工作表函數,例如確保.address返回你想要的範圍。你也可以在這些上使用debug.print。最終你會看到發生了什麼。 – 2013-03-09 04:46:00