运行时错误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提供的所有东西都是在那里,或者抓住错误并且解决不该做的事情。