返回类型为日期的自定义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。最终你会看到发生了什么。