自定义Excel VBA函数,返回类型为Date

时间:2013-03-08 17:39:50

标签: 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()参数定义动态构造的Range。这样做,找到范围锚点,我选择正确的表格(Counter+1允许正确);然后在第一列中找到特定的“预定义”字符串;选择找到的单元格的整行,并在该范围内找到另一个预定义的字符串;然后,该范围从该锚定单元格下方的单元格定义到由NumOfVendors(Counter)+1

定义的偏移量

在运行上述内容时,它给了我:

  

在“GetMSDate =”语句中输入Mismatch错误。

1 个答案:

答案 0 :(得分: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