将 1-1-1900 更改为当前日期

问题描述 投票:0回答:1

Excel 2013 ....我使用此vba代码将系统日期更改为当前日期,而不是手动输入2024年8月23日,我只在单元格内输入23,然后按回车键将其更改为2024年8月23日。所以我使用此代码来避免 1990 年 1 月。但我的问题是每当我删除输入日期的单元格时。它没有删除,而是将其更改为 7 月 31 日。

请帮忙

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range, rint As Range, r As Range
    Set rng = Range("A1:A10")
    Set rint = Intersect(rng, Target)

    For Each r In rint
        Application.EnableEvents = False
            r.Value = DateSerial(Year(Date), Month(Date), r.Value)
        Application.EnableEvents = True
    Next r
End Sub
vba excel-2013
1个回答
0
投票

当您删除单元格时,将调用该代码。

当到达

r.Value = DateSerial(Year(Date), Month(Date), r.Value)
行时,它会查找,但没有得到
r.Value
的结果。

因此,它将

r.Value
视为
0

因此,它会将

r.Value
更改为
2024-08-00
— 正如您所说的那样。 从编程角度来说,本月(八月)的第零天与上个月(七月)的最后一天相同。 因此,2024-08-00 变为
2024-07-31
因此:在使用它之前,您应该

可能

检查r.value是否在1到31之间。 (否则,如果您输入

实际日期
,您也会收到完全不同的错误: 2024-08-23 =
45527
DateSerial(2024, 08, 45527)
=
2114-04-18
更高级的检查是查看它是否在 1 和本月的天数之间。  这可以防止“二月输入 30”(三月 1

st

或 2nd,具体取决于是否是闰年)之类的问题。 Application.EnableEvents = False If IsNumeric(r.Value) Then 'In case you typed text If r.Value = Application.Median(1, r.Value, Day(DateSerial(Year(Date),Month(Date)+1,0))) Then 'Valid for this month r.Value = DateSerial(Year(Date), Month(Date), r.Value) End If End If Application.EnableEvents = True

	
© www.soinside.com 2019 - 2024. All rights reserved.