我刚刚在三周前才开始学习VBA,请随时批评我的代码。
我想使用IIF
语句来执行If语句内的操作:
Dim rng_ModPlanStart as range
Dim QueryDate as Variant
Set rng_ModPlanStart = ThisWorkbook.ActiveSheet.Range("AH2:AH" & LastCell)
rng_ModPlanStart(1).Offset(-1, 0).Value = "Module Planned Start"
For Each cl In rng_ModPlanStart
QueryDate = Application.VLookup(ActiveSheet.Range("E" & cl.Row), Sheets("Chamber Schedule").Range("B:U"), 20, False)
If Not ((IsError(QueryDate))) Then
cl.Value = DateDiff("d", CDate(QueryDate), Date)
End If
Next cl
但是尝试使用IIF时出现错误
IIF(IsError(QueryDate), "", DateDiff("d", CDate(QueryDate), Date))
因为VBA认为QueryDate不是日期,所以应该由CDate函数来对吗?我想念什么?
最佳答案
您不想为此使用IIf
(或几乎所有恕我直言的东西)。问题在于IIf
不是“语句”-它是一个函数。这意味着所有参数在传递给IIf
函数之前都要经过评估。因此,它评估(按顺序):
IsError(QueryDate)
""
DateDiff("d", CDate(QueryDate), Date) 'This is still evaluated if IsError returns True.
这意味着您将获得运行时错误,因为无论
DateDiff
是否是错误,您都将调用QueryDate
。IIf
与其他语言中的三元表达式不同,因此不能将其用于保护子句。关于excel - VBA-带CDate(变体)的IIF语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42428165/