在单元格中搜索默认日期

Searching a default date inside cells

提问人:Andrea 提问时间:9/12/2023 最后编辑:BigBenAndrea 更新时间:9/12/2023 访问量:27

问:

我正在从 SQL 数据库中检索一些信息。有时碰巧收到一个空白日期,Excel 在默认日期中转换:01/01/1900

我想放置一个空白值而不是默认日期,但我的问题是我尝试搜索默认日期的所有方法都不起作用。

enter image description here

我在 For 循环中尝试了这些代码,但每次使用它时,Excel 都找不到默认日期。如果我调试并停止并尝试正常搜索。Excel 告诉我不可能找到 01/01/1900,就像它找不到那个日期一样。

Set Rng = Cells.Find(What:=CDate(2) _
            , After:=ActiveCell _
            , LookIn:=xlValues _
            , LookAt:=xlWhole _
            , SearchOrder:=xlByRows _
            , SearchDirection:=xlNext _
            , MatchCase:=False _
            , SearchFormat:=False)
    If Rng Is Nothing Then GoTo NextPage
    sRngTrov = Rng.Address
    Range(sRngTrov).Select
    Selection.NumberFormat = "0"
    Range(sRngTrov).Value = ""

你有解决方案吗?

Excel VBA 日期

评论

0赞 BigBen 9/12/2023
What:="01/01/1900"?
0赞 Ron Rosenfeld 9/12/2023
Set Rng = Cells.Find(What:=CDate(1).VBA 日期和 Excel 日期具有不同的基数 ( vs .这使得在存储值一致之前的日期变得混乱。您也可以使用 ,但这可能不太可靠,尤其是在更改该列的日期格式时。31-Dec-18991-Jan-19001-Mar-1900what:="1/1/1900"
0赞 Andrea 9/12/2023
如果我搜索“1/1/1900”,它找不到它。似乎它无法识别它

答:

0赞 taller 9/12/2023 #1

请尝试使用与单元格相同的样式设置日期格式。我已经在 Excel 365 版本 2309 上测试了代码。

    Set Rng = ActiveSheet.Cells.Find(What:=Format(CDate(2), "mm/dd/yyyy") _

默认日期格式可能不同。仔细检查一下

    Debug.Print CDate(2), Format(CDate(2), "mm/dd/yyyy")

评论

0赞 Andrea 9/12/2023
我尝试了您的解决方案,但仍然不起作用。它什么也没找到,也是不可能的,因为我看到了日期。
0赞 Andrea 9/12/2023 #2

我找到解决方案,将Application.FindFormat.NumberFormat放在Find之前。

Application.FindFormat.NumberFormat = "m/d/yyyy"
  Set Rng = Cells.Find(What:=Format(CDate(2), "m/d/yyyy") _
            , After:=ActiveCell _
            , LookIn:=xlValues _
            , LookAt:=xlPart _
            , SearchOrder:=xlByRows _
            , SearchDirection:=xlNext _
            , MatchCase:=False _
            , SearchFormat:=True)
    If Rng Is Nothing Then GoTo Next

评论

0赞 taller 9/12/2023
屏幕截图上的数据不在 中。m/d/yyyy