【问题标题】:Searching for Dates in Column in VBA在 VBA 中的列中搜索日期
【发布时间】:2019-08-07 17:57:14
【问题描述】:

我正在尝试在 VBA 的列中搜索日期。我已验证该值存在于列中,并且我还将日期格式化为参考列中的日期。一直在挠头,我不确定我做错了什么。我已经看到了几个与此相关的问题,我什至反映了其中一个解决方案,但没有奏效。

注意事项: 1) 所有日期都存储在第 1 (A) 列中 2) 日期格式为“m/d/yyyy” 3) 第 13 页是范围所在的位置 4) 我还有一个命名范围,其中包含我正在搜索的日期我通过引用单元格而不是命名范围来访问该范围,因为 VBA 似乎不喜欢那样。有什么想法吗?

    searchString = Format(Sheet3.Cells(5, 4).Value, "m/d/yyyy")

    With Sheet13.Range("A:A")

        Set searchCell = .Find(What:=CDate(searchString), After:=ActiveCell, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)

    End With

【问题讨论】:

  • Sheet13.Range("A:A") 中的日期是否存储为日期或文本。 Excel 日期实际上是数字,而不是文本。您似乎正在尝试使用日期字段进行文本匹配。
  • 试试:After:= .Cells(1,1)

标签: excel vba


【解决方案1】:

您需要匹配日期(在Excel中存储为数值):

Dim DateVal As Date

DateVal = Sheet3.Cells(5, 4).Value

With Sheet13.Range("A:A")
    Set searchCell = .Find(What:=DateVal, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows)
End With

【讨论】:

  • Shai Rado 上面的解决方案在尝试执行 find 语句时会抛出类型不匹配异常。
  • @StormsEdge 你定义了Dim searchCell as Range 吗?
  • 是的。 searchCell 是一个范围,而 searchString 是一个日期。当我第一次开始时,它是一个字符串。似乎都不起作用
【解决方案2】:

另一个使用 ActiveAnything 之类的引用会导致错误的示例。

在您的代码中,如果ActiveCell 恰好不在 sheet13 A 列中,您的代码将出错。

更改为 After:=.Cells(1,1) 或类似名称,以确保从用作 SearchRange 的列中的某个单元格开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-27
    • 2015-06-11
    • 1970-01-01
    • 2015-10-06
    • 2018-10-13
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多