Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回类型为日期的自定义Excel VBA函数_Excel_Vba - Fatal编程技术网

返回类型为日期的自定义Excel VBA函数

返回类型为日期的自定义Excel VBA函数,excel,vba,Excel,Vba,我有一本多页的工作簿。除摘要工作表外,所有其他工作表都有一个连续单元格的动态范围(在一列中),用于存储某些日期格式的值。我需要动态选择该范围并选择最大的日期值。函数应该返回该值 以下是我所尝试的: Function GetMSDate(Counter As Integer, DesignCtrs() As String, NumOfVendors() As Long, MSDesc() As String, PlanOrActual As String) As Date

我有一本多页的工作簿。除摘要工作表外,所有其他工作表都有一个连续单元格的动态范围(在一列中),用于存储某些日期格式的值。我需要动态选择该范围并选择最大的日期值。函数应该返回该值

以下是我所尝试的:

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
允许正确);然后在第一列中找到一个特定的“预定义”字符串;选择找到的单元格的整行,并在该范围内找到另一个预定义字符串;然后,从该定位单元下方的单元到由以下定义的偏移量定义范围:
numoffers(Counter)+1

在运行上面的过程中,它给了我:

“GetMSDate=”语句中的类型不匹配错误


要进行调试,请将值分配给变量,然后在分配后输出该变量的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和double如果我打印声明的GetMSDate而不是变量v,它会打印12:00:00 AM和Date。我认为这意味着Max()函数的计算结果与我预期的不一样。我建议将工作表函数分开,例如确保.address返回所需的范围。你也可以在上面使用debug.print。最终你会看到发生了什么。