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

时间:2018-11-08 21:14:29

标签: excel vba

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

如果我尝试再次运行它,则似乎在所有日期查找中均失败。 该代码甚至对操作做了一个简短的认识,并且没有错误地执行,然后又在重新运行时返回错误。

我明白了

  

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

让我感到困惑的是,直到大约一周前,这种方法在去年仍然运行良好。任何帮助将不胜感激。

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

1 个答案:

答案 0 :(得分:1)

使用Find()时,尝试进行匹配之前,先检查一下是否有匹配项会更可靠。

例如:

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