【问题标题】:excel vba range.find not finding dateexcel vba range.find找不到日期
【发布时间】:2015-11-10 07:26:29
【问题描述】:

我正在尝试建立最小日期及其相关行以供以后在子例程中使用。

我遇到了一个错误,过去几个小时我一直在隔离问题并寻找解决方案,但无济于事。

我有一个电子表格,其中column B 包含按顺序排列的一系列日期。我可以找到最小日期(消息框正确返回 2015 年 11 月 14 日),但是当我尝试使用该日期值来识别行号时,我得到错误 91。这是我的代码:

    Sub testing()

    ThisWorkbook.Worksheets("Burn Curve Data").Activate

    Dim rDateColumn As Range
    Dim dMinDate As Date
        Set rDateColumn = ActiveSheet.Range("B:B")
        dMinDate = Application.WorksheetFunction.Min(rDateColumn)

    MsgBox dMinDate

    Dim rMinCell As Range
    Dim intMinRow As Integer
        Set rMinCell = rDateColumn.Find(dMinDate, LookIn:=xlValues, LookAt:=xlWhole)
        intMinRow = rMinCell.Row

    MsgBox intMinRow

    End Sub

我尝试在Set rMinCell 之后插入If Not 语句,并确定range.find 没有找到日期。这是我用来识别错误的语句,但我删除了它以清理此帖子的代码。

    If Not rMinCell is Nothing Then
        intMinRow = rMinCell.Row
    Else
        MsgBox "error finding rMinCell"
    End If

我还尝试将dMinDate 重新保存到一个字符串中,然后在range.find 中使用该字符串,但我遇到了同样的错误,即找不到日期。

另一个可能相关或不相关的细微差别是此数据存在于工作表上的指定范围内。我的range.find 线路有什么问题?!?

【问题讨论】:

  • 如果日期是按顺序排列的,为什么还要费心去寻找最小值呢?如果您知道日期的顺序,只需取范围内的第一个或最后一个单元格,具体取决于它的排序方式
  • column B 中的这些日期上方和下方都有包含其他信息的单元格。我还将使用dMinDate 作为用户表单中的默认值。当用户想要更改此日期范围的开始日期和结束日期时,他们将使用此表单。不能依赖这里的人正确复制/插入带有公式的新行。
  • 没问题。 B 列中的日期是否正确格式化为日期(右键单击-> 格式化单元格并确保在类别下选择了“日期”)?我做了一个快速测试,如果格式不是日期,我得到了你得到的错误 91。您可以在设置变量并查看是否有帮助后添加代码rDateColumn.NumberFormat = "m/d/yyyy"
  • 如果您收到错误 91 而不是收到错误处理程序提供的消息...这意味着您实际上正在输入 ` If Not rMinCell is Nothing Then intMinRow = rMinCell.Row ` ?我的假设是否正确?
  • AAARRRGGGGHHHHH!!!你是对的。

标签: excel date find runtime-error vba


【解决方案1】:

正如 cmets 中所讨论的,当列的格式设置为 Date 以外的格式时,就会出现问题。

要通过代码执行此操作,您可以在设置 rDateColumn 变量后添加此行:

rDateColumn.NumberFormat = "m/d/yyyy"

这应该将列格式化为日期,并且您的 Find 方法应该可以正常工作。

您也可以选择列,单击“设置单元格格式”,然后确保在“类别”下选择“日期”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    相关资源
    最近更新 更多