我有一个用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
答案 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