【问题标题】:Now() function in Excel VBA macro stopped workingExcel VBA宏中的Now()函数停止工作
【发布时间】:2026-02-10 01:35:01
【问题描述】:

我正在尝试在 Excel 工作簿的 VBA 命令按钮中使用的提示中设置警告。

两天前它运行良好,但目前无法运行,我不明白为什么。这里有之前工作的代码:

Option Explicit

Private Sub CommandButton1_Click() 
Dim wb As Workbook Dim FinalDate As Variant
Set wb = Application.Workbooks("Test")

FinalDate = InputBox("Introduce the final date for analysis in the
following format MM/DD/YYYY") 

'< Check that final date is in the correct format
        If IsDate(FinalDate) = False Then
            MsgBox ("The date you entered is NOT IN THE CORRECT FORMAT!!!")
            Exit Sub
        End If

'<Check that final date is NOT later than today
        If FinalDate > Now Then '< **This part is the one that used to work**
            MsgBox ("The date you entered is LATER THAN THE CURRENT DATE!!!")
            Exit Sub
        End If

            wb.Worksheets("Sheet1").Range("K2") = FinalDate
End Sub

这是之前工作的部分,但昨天停止工作:

If FinalDate > Now Then
    MsgBox ("The date you entered is LATER THAN THE CURRENT DATE!!!")
    Exit Sub
End If

目前,每次我在此提示屏幕中引入任何日期,无论是晚于还是早于当前日期,我都会收到警告“您输入的日期晚于当前日期!!!” .

Excel 工作簿中唯一改变的是,不同电子表格中有几个单元格包含未来约会的未来日期,但函数 now() 应该检查系统日期,而不是工作簿中的日期,不是吗?

非常感谢,

最好的问候,

亚特罗辛

【问题讨论】:

  • 您可能希望仅将示例缩减为显示无效的必要内容

标签: excel vba date datetime macros


【解决方案1】:

您的问题是您正在将用户输入的字符串与 now 函数返回的日期进行比较。

这个值有两种不同的类型。

If FinalDate > Now Then

您应该使用 CDate() 将 FinalDate 转换为日期

if CDate(FinalDate) > Now Then

【讨论】:

  • FinalDate &gt; Now 偶尔会起作用的唯一原因是它在没有强制转换的情况下执行String 比较(Now 被隐式强制转换为String,而不是其他方式周围)。
  • 非常感谢您的回答。由于IsDate () 没有返回任何错误,我没有意识到我正在将字符串与日期进行比较。