运行时错误91:对象variables或块variables未在Excel 2013中设置

我有一个macros:

Sheets("AMEND ESTIMATE").Select Cells.Find(What:=Sheets("AMEND QUOTE").Range("G4").Value, After:=ActiveCell, LookIn:=xlValues, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False).Activate ActiveCell.Offset(41, 3).Select Selection.Copy Sheets("AMEND QUOTE").Select Range("G4").Offset(14, 0).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False '#2 Sheets("AMEND ESTIMATE").Select Cells.Find(What:=Sheets("AMEND QUOTE").Range("H4").Value, After:=ActiveCell, LookIn:=xlValues, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False).Activate ActiveCell.Offset(41, 3).Select Selection.Copy Sheets("AMEND QUOTE").Select Range("H4").Offset(14, 0).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False '#3 Sheets("AMEND ESTIMATE").Select Cells.Find(What:=Sheets("AMEND QUOTE").Range("I4").Value, After:=ActiveCell, LookIn:=xlValues, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False).Activate ActiveCell.Offset(41, 3).Select Selection.Copy Sheets("AMEND QUOTE").Select Range("I4").Offset(14, 0).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 

正如你所看到的,这个macros可以从AMEND ESTIMATE(工作表)里的Amend Quote中find一个范围,获取一个值并粘贴在Amend Quote的某个偏移单元中。

这工作正常,但现在是抛出运行时错误91。

你能帮我么。

问题是你的发现没有find任何东西。 当find找不到返回结果时,你需要加上一些error handling的办法,把find操作的结果设置成一个variables,然后只在有variables的时候才对variables进行激活。

像这样的东西:

编辑 – 更新下面的代码,包括如果没有findsearch项或者search项是零长度string时允许子项退出的行为。

我还整理了大量的代码以删除“select然后操作” – 您可以在不select它们的情况下操作单元格,这将节省大量的处理时间。

最后,我将整个50次迭代压缩到一个循环中,而不是每次重复50次同样的操作来更改单元格引用1列。

请记住接受我的答案是正确的,如果它可以帮助你。

 Sub test() Dim rng As Range Dim aEst As Worksheet, aQuo As Worksheet 'Set your sheet names into variables for easier referencing Set aEst = Sheets("AMEND ESTIMATE") Set aQuo = Sheets("AMEND QUOTE") For i = 7 To 57 '7 = Column H, 8 = Column G, etc. 'Set the address of the found value to the rng variable Set rng = aEst.Cells.Find(What:=aQuo.Cells(4, i).Value, After:=ActiveCell, LookIn:=xlValues, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False) If Not rng Is Nothing Then 'CHECK IF THE SEARCH TERM (FROM QUOTE SHEET) WAS FOUND IN THE TARGET SHEET (ESTIMATE) If Not rng = "" Then 'CHECK IF THE SEARCH TERM WAS A ZERO LENGTH STRING rng.Offset(41, 3).Copy 'Copy the cell 41 rows down and 3 columns across aQuo.Cells(4, i).Offset(14, 0).PasteSpecial Paste:=xlPasteValues 'Paste into the cell 14 rows below the original search term in the QUOTE sheet ElseIf rng = "" Then 'EXIT SUB IF SEARCH TERM WAS A ZERO LENGTH STRING MsgBox "Work is Done" Exit Sub End If ElseIf rng Is Nothing Then 'EXIT SUB IF SEARCH TERM WAS NOT FOUND IN THE TARGET SHEET MsgBox "Work is Done" Exit Sub End If Next i 'Move to the next column across and loop End Sub