对象variables未设置(错误91)

我对VBA的世界相当陌生,并且负责编写一些代码,这些代码将逐步遍历A列中的公司名称,当find该名称时,代码会将相关行复制并粘贴到新创build的工作簿中。 它应该继续到下一个名字等等。 在testing代​​码工作,但我已经进入今天,我现在正在rngG.Select行上的对象variables错误

任何人都可以帮助,因为我一直在看这个一个小时,现在是完全困惑我吗?

Sub CrystalUtilitesLtd() Dim Wk As Workbook Dim c As Range Dim rngG As Range Application.DisplayAlerts = False For Each c In Intersect(ActiveSheet.UsedRange, Columns("a")) If c = "3rd Party - Crystal Utilities Ltd" Then If rngG Is Nothing Then Set rngG = c.EntireRow Set rngG = Union(rngG, c.EntireRow) End If Next c rngG.Select Selection.Copy Workbooks.Open "I:\Data\OMR8293\General\Ops Team\Customer Transfer Team\TPI Registration Reporting\TPI Registration Data Template1.xlsx" Range("A2").Select Selection.PasteSpecial xlPasteValues Range("A1:AG1").EntireColumn.AutoFit ActiveWorkbook.SaveAs ("I:\Data\OMR8293\General\Ops Team\Customer Transfer Team\TPI Registration Reporting\Crystal Utilities Ltd\Registrations_1010112503_" _ & Format(Now(), "YYYYMMDD") & ".xlsx") ActiveWorkbook.Close Call EnergyAnalystUK Application.DisplayAlerts = True End Sub 

replace以下两行代码…

 rngG.Select Selection.Copy 

用这些线

 If Not rngG Is Nothing Then rngG.Copy Else MsgBox "No range to copy.", vbExclamation Exit Sub End If 

原因是如果 c <> "3rd Party - Crystal Utilities Ltd"那么rngG对象从来没有被赋予一个范围,所以它仍然是Nothing ,因为你不能做Nothing.Select你将得到一个Object Variable或With块未设置错误。

通过上述更改,您的完整代码将如下所示…

 Sub CrystalUtilitesLtd() Dim Wk As Workbook Dim c As Range Dim rngG As Range Application.DisplayAlerts = False For Each c In Intersect(ActiveSheet.UsedRange, Columns("a")) If LCase(VBA.Trim(c)) = "3rd party - crystal utilities ltd" Then If rngG Is Nothing Then Set rngG = c.EntireRow Set rngG = Union(rngG, c.EntireRow) End If Next c If Not rngG Is Nothing Then rngG.Copy Workbooks.Open "I:\Data\OMR8293\General\Ops Team\Customer Transfer Team\TPI Registration Reporting\TPI Registration Data Template1.xlsx" Range("A2").Select Selection.PasteSpecial xlPasteValues Range("A1:AG1").EntireColumn.AutoFit ActiveWorkbook.SaveAs ("I:\Data\OMR8293\General\Ops Team\Customer Transfer Team\TPI Registration Reporting\Crystal Utilities Ltd\Registrations_1010112503_" _ & Format(Now(), "YYYYMMDD") & ".xlsx") ActiveWorkbook.Close Else MsgBox "No range to copy.", vbExclamation End If Call EnergyAnalystUK Application.DisplayAlerts = True End Sub