【发布时间】:2014-10-12 14:24:48
【问题描述】:
我的 VBA 子例程似乎找不到匹配日期的行。
我的目标: 查找 Sheet1 中第一行的行号,其日期等于 Sheet2 中最早的日期
我的流程是:
- 在 Sheet2 中查找日期最早的行
- 在 Sheet1 中使用 同一日期并返回该行的行号。
会发生什么
当我运行我的 sub 时,我得到的是运行时错误 '91' - 对象变量或未设置块变量。 如果我尝试“Msgbox FindRow Is Nothing”,我会得到真正的回应。
这是没有意义的,因为在这个系统中 Sheet1 E6 与 Sheet2 E8 具有相同的值
我的数据:
Sheet1 (E2 - E8):
09/10/2013
09/10/2013
14/11/2013
14/11/2013
17/11/2013
17/11/2013
20/11/2013
Sheet2 (E2 - E8):
01/12/2013
01/12/2013
27/11/2013
27/11/2013
24/11/2013
24/11/2013
20/11/2013
17/11/2013
到目前为止我的代码:
Private Sub transferPostings()
Dim EarliesNewDate As Variant
Dim FirsCandidateOverlappingRow, rowCountHist, onlyNewRowsCount As Integer
Dim wsHist, wsNew As Worksheet
Dim possibleDuplicates, onlyNew, FindRow As Range
Set wsHist = Worksheets("Sheet1")
Set wsNew = Worksheets("Sheet2")
wsNew.Range("E1").End(xlDown).NumberFormat = "General"
Range(wsHist.Range("E2"), wsHist.Range("E2").End(xlDown)).NumberFormat = "General"
EarliesNewDate = wsNew.Range("E1").End(xlDown).Value
Set FindRow = Range(wsHist.Range("E2"), wsHist.Range("E2").End(xlDown)).Find(EarliesNewDate)
wsNew.Range("E1").End(xlDown).NumberFormat = "dd/mm/yyyy"
Range(wsHist.Range("E2"), wsHist.Range("E2").End(xlDown)).NumberFormat = "dd/mm/yyyy"
MsgBox FindRow.Row
End Sub
非常感谢您对此问题的任何帮助。
【问题讨论】:
-
你在E1有什么吗?还是E1为空?
-
您的国际设置是什么?使用我的美国设置,您的日常工作将按设计进行。所有日期值都是真的日期吗?还是其中一些是日期的文本表示形式?
-
似乎“EarliesNewDate”在我的本地代码中被声明为“日期”。当将其声明为 double 时,代码也对我有用。