gpt4 book ai didi

excel - VBA - 带 CDate 的 IIF 语句(变体)

转载 作者:行者123 更新时间:2023-12-02 07:21:29 24 4
gpt4 key购买 nike

我三周前刚刚开始学习 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.

这意味着您将收到运行时错误,因为无论 QueryDate 是否错误,您都会调用 DateDiff

IIf 与其他语言中的三元表达式不同,因此不能将其用于保护子句。

关于excel - VBA - 带 CDate 的 IIF 语句(变体),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42428165/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com