Excel vba运行时错误91:查找范围内的日期

Excel vba运行时错误91:查找范围内的日期,excel,vba,Excel,Vba,我有一个用excel编写的vba脚本,它运行得非常愉快,直到几天前它变得喜怒无常。我有四个具有命名范围的工作表,我正在复制名称范围,并粘贴到具有今天日期的列中。此宏在第二次日期查找(Sheet2)和(Sheet4)时失败 如果我尝试再次运行它,它似乎失败了,然后在所有的日期查找。 这段代码甚至简单地实现了该做什么,并且执行时没有错误,只是在重新运行时返回错误 我明白了 运行时错误91:对象变量或未设置块 让我困惑的是,在过去的一年里,直到大约一周前,这一切都很顺利。任何帮助都将不胜感激 Sub

我有一个用excel编写的vba脚本,它运行得非常愉快,直到几天前它变得喜怒无常。我有四个具有命名范围的工作表,我正在复制名称范围,并粘贴到具有今天日期的列中。此宏在第二次日期查找(
Sheet2
)和(
Sheet4
)时失败

如果我尝试再次运行它,它似乎失败了,然后在所有的日期查找。 这段代码甚至简单地实现了该做什么,并且执行时没有错误,只是在重新运行时返回错误

我明白了

运行时错误91:对象变量或未设置块

让我困惑的是,在过去的一年里,直到大约一周前,这一切都很顺利。任何帮助都将不胜感激

Sub Test()

Range("Sheet1").Copy
Worksheets("Sheet1").Cells.Find(What:=Date, After:=Range("A1"), LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlNext).Offset(4, 0).PasteSpecial Paste:=xlPasteValues
Sheets("Sheet1").Select
Range("C2").Select

Range("Sheet2").Copy
Worksheets("Sheet2").Cells.Find(What:=Date, After:=Range("A1"), LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlNext).Offset(4, 0).PasteSpecial Paste:=xlPasteValues
Sheets("Sheet2").Select
Range("C2").Select

Range("Sheet3").Copy
Worksheets("Sheet3").Cells.Find(What:=Date, After:=Range("A1"), LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlNext).Offset(4, 0).PasteSpecial Paste:=xlPasteValues
Sheets("Sheet3").Select
Range("C2").Select

Range("Sheet4").Copy
Worksheets("Sheet4").Cells.Find(What:=Date, After:=Range("A1"), LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlNext).Offset(4, 0).PasteSpecial Paste:=xlPasteValues
Sheets("Sheet4").Select
Range("C2").Select

End Sub
使用
Find()
时,在尝试对匹配项执行操作之前,检查匹配项会更加可靠

例如:


似乎Find()不匹配,因此该行的其余部分失败。@TimWilliams是的-我尝试创建一个新的excel工作簿,创建一个新的工作表,并在工作表之间复制具有相同日期的工作表(认为该工作簿可能已损坏),但它仍然无法找到工作表2的日期。如果我将“日期”改为“9/11/2018”,它会起作用。表2上有点不对劲-日期真的是日期还是文本?这些表的格式和数据与我为测试目的在表中创建所有数据时突出显示的四张表的格式和数据完全相同。我刚才尝试的是在宏中移动工作表的执行,因此Sheet2、1、4、3。它在每一页上都会失败,(现在是第1页和第3页)您的代码工作完美:)没有错误,找到所有日期。。。我想知道是不是因为使用了Dim和Set
Sub Test()

    Dim f As Range, nm

    For Each nm In Array("Sheet1", "Sheet2", "Sheet3", "Sheet4")

        Set f = Worksheets(nm).Cells.Find(What:=Date, After:=Worksheets(nm).Range("A1"), _
                          LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlNext)

        If Not f Is Nothing Then
            With Range("Sheet1")
                f.Offset(4, 0).Resize(.Rows.Count, .Columns.Count).Value = .Value
            End With
        Else
            MsgBox "Date not found on '" & nm & "'"
        End If

    Next nm

End Sub