运行时错误91:对象variables或未设置块
我有一个macros,search并从一张表复制一些date回到另一个,如果该值被发现,并重复每一行非空白。
在我目前的约150行的文档中,下面的macros运行良好,但随机抛出错误:
运行时错误“91”:对象variables或块variables未设置
这是macros观的:
Sub Update() Application.ScreenUpdating = False Application.CutCopyMode = False Application.StatusBar = "Cleaning New Roles..." Sheets("new").Select Range("A2").Select Do Until IsEmpty(ActiveCell) Dim SearchValue As String SearchValue = ActiveCell.Value Sheets("Old").Select On Error GoTo Error_handler Cells.Find(What:=SearchValue, SearchOrder:=xlByRows, SearchDirection:=xlNext, SearchFormat:=False).Activate Range("R" & Selection.Row & ":T" & Selection.Row).Select Selection.Copy ActiveCell.Offset(0, -1).Select Sheets("new").Select Range("R" & Selection.Row).Select Selection.PasteSpecial Paste:=xlPasteValues Error_handler: Sheets("new").Select Range("A" & Selection.Row).Select ActiveCell.Offset(1, 0).Select Loop Application.ScreenUpdating = True Application.StatusBar = False End Sub
debugging突出显示了Cells.Find
行。
我不明白为什么前100行是好的,然后就打破了。
任何指导将是非常有益的。
如果成功, Find()
函数会返回一个Range
对象。 你假设它会一直是,并且将一个Activate()
调用链接到最后:
Cells.Find(What:=SearchValue, SearchOrder:=xlByRows, SearchDirection:=xlNext, SearchFormat:=False).Activate
如果Find()
失败,这将失败。 相反,将返回值分配给Range
对象并testing成功:
Dim r As Range Set r = Cells.Find(What:=SearchValue, SearchOrder:=xlByRows, SearchDirection:=xlNext, SearchFormat:=False) If Not r Is Nothing Then ' Find successful End If
尝试没有这么多。select。
Sub Update() Dim SearchValue As String, rFnd As Range, o As Long Application.ScreenUpdating = False Application.CutCopyMode = False Application.StatusBar = "Cleaning New Roles..." With Sheets("new") o = 0 Do Until IsEmpty(Range("A2").Offset(o, 0)) SearchValue = vbNullString SearchValue = .Range("A2").Offset(o, 0).Value With Sheets("Old") On Error GoTo Error_handler Set rFnd = .Cells.Find(What:=SearchValue, SearchOrder:=xlByRows, SearchDirection:=xlNext, SearchFormat:=False) Sheets("new").Range("R2").Offset(o, 0).Resize(1, 3) = _ .Range("R" & rFnd.Row).Resize(1, 3).Value End With Error_handler: o = o + 1 Loop End With Application.ScreenUpdating = True Application.StatusBar = vbNullString End Sub
请参阅如何避免使用Excel中的selectVBAmacros来获取更多的方法来摆脱依靠select和activate来实现您的目标。
通常如果找不到search到的string,就会出现这个错误。 VBA没有提出“找不到你要找的东西”,而是向你抛出这个错误信息。 所以你需要确保你给VBA提供的所有东西都是在那里,或者抓住错误并且解决不该做的事情。