我的VBA子程序似乎无法找到匹配日期的行。
我的目标: 要查找Sheet1中第一行的行号,其日期等于Sheet2中最旧的日期
我的流程是:
发生了什么
当我运行我的sub时,我得到的是运行时错误' 91' - 未设置对象变量或块变量。 如果我尝试" Msgbox FindRow什么都不是"我得到了真实的回应。
这没有任何意义,因为在这个系统中,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
非常感谢任何有关此问题的帮助。
答案 0 :(得分:0)
您的.Find
命令未提供任何参数。这意味着它使用的是上次使用的参数(如果未在此会话中使用,则为默认值)。至少应该使用LookIn:=xlValues
,您应该指定LookAt:=xlWhole
。
Sub transferPostings()
Dim EarliesNewDate As Variant
Dim FirsCandidateOverlappingRow, rowCountHist, onlyNewRowsCount As Integer
Dim wsHist As Worksheet, 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 = wsHist.Range(wsHist.Range("E2"), wsHist.Range("E2").End(xlDown)).Find(What:=EarliesNewDate, LookIn:=xlValues, LookAt:=xlWhole)
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
你没有提到Sheet1!E:E中的日期是公式的结果。我强烈怀疑他们是,而且值得一提。
顺便说一句,当声明为Dim wsHist, wsNew As Worksheet
时, wsHist 是变体而不是工作表。在这种情况下它并不重要,但您应该知道如何为将来的实践声明变量。有关详细信息,请参阅Declaring Variables或Declaring Variables。