Excel VBA中的Range.Find无法找到日期

3

我正在尝试确定最小日期及其相关行以便稍后在子程序中使用。

我遇到了一个错误,花了几个小时隔离问题并寻找解决方案,但没有成功。

我有一个电子表格,其中 B列包含按顺序排列的一系列日期。 我可以找到最小日期(消息框正确返回11/14/2015),但是当我尝试使用该日期值来确定行号时,我会收到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 行有什么问题?!?


如果日期已按顺序排列,为什么还要找最小值并进行搜索呢?如果您知道日期的顺序,只需取范围中的第一个或最后一个单元格,具体取决于它是如何排序的。 - Soulfire
B列 中这些日期上方和下方都有其他信息。我还将在用户窗体中使用 dMinDate 作为默认值。当用户想要更改此日期范围的开始和结束日期时,他们将使用此表单。在这里,人们无法依靠正确地复制/插入具有公式的新行。 - J Hz
大卫,对不起我表达不清楚...错误处理程序返回的是我的错误消息,而不是错误91。 - J Hz
@JoshuaRoss,我该如何将您的评论标记为答案?我可以自己发布答案,但我不想损害您的声誉;) - J Hz
非常感谢您!让我来回答这个问题,我很感激! - Soulfire
显示剩余4条评论
1个回答

2

根据评论中讨论的情况,似乎问题出现在列格式不是Date时。

如果想通过代码解决这个问题,您可以在设置rDateColumn变量后添加以下行:

rDateColumn.NumberFormat = "m/d/yyyy"

这应该将列格式化为日期,您的“查找”方法应适当地工作。
或者,您可以选择该列,单击“格式化单元格”,然后确保在“类别”下选择了“日期”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接