“对象未设置”错误

Excel VBA中有一个macros给我一个错误。 我第一次运行它后,我启动Excel,它运行完美,但是当我尝试运行它后,它错误了在线nameRow = nameRange.Row给错误Object not set ,我真的很困惑为什么。

 Sub AssignGroups() Dim membership As Worksheet Dim wb As Workbook Dim groups As Worksheet Dim nameRow As Long Dim fullNameString As String Dim nameRange As Range Dim groupRange As Range Dim nameRange2 As Range Dim nameIndex As Long Dim userNameString As String Dim barIndex As Long Set wb = ActiveWorkbook Set membership = Sheets("User Group Membership") Set groups = Sheets("User Assigned to Groups") membership.Activate Set nameRange = membership.Range("A:A").Find("user -name") nameRow = nameRange.Row fullNameString = membership.Cells(nameRow, "A").Value nameIndex = InStr(fullNameString, "user -name") barIndex = InStr(fullNameString, "|") userNameString = Mid(fullNameString, nameIndex + 12, ((barIndex - 4) - (nameIndex + 12))) groups.Activate Set nameRange2 = groups.Range("A:CH").Find(userNameString) nameColumn = nameRange2.Column membership.Activate membership.Cells(nameRow, "A").Activate Do ActiveCell.Offset(1).Activate If Not IsEmpty(ActiveCell.Value) Then cellValue = ActiveCell.Value groups.Activate Set groupRange = groups.Range("A:CH").Find(cellValue, , , lookat:=xlWhole) groupRow = groupRange.Row groups.Cells(groupRow, nameColumn).Activate ActiveCell.Value = "X" membership.Activate End If Loop Until IsEmpty(ActiveCell.Value) End Sub 

难道是因为我引用ActiveCell吗?

代码中的后续“ Find操作仅指定查看整个单元格。 这个设置将会持续下去,所以你可能只需要指定不在第一次Find调用时查看整个单元格:

 Set nameRange = membership.Range("A:A").Find(What:="user -name", Lookat:=xlpart) 

第二次运行时,“user-name”是否存在?

  Set nameRange = membership.Range("A:A").Find("user -name") nameRow = nameRange.Row fullNameString = membership.Cells(nameRow, "A").Value 

检查nameRange是否返回一个引用,并且(我认为),FIND记得它上次被使用的时间,所以可能正在查看前一个FIND之下的单元格(见下面的代码):

 Dim nameRange As Range Set nameRange = membership.Range("A:A").Find( _ What:="user -name", _ After:=membership.Range("A1"), _ SearchDirection:=xlNext) If Not nameRange Is Nothing Then 'Do stuff if namerange found. End If 

这行不会返回与nameRange相同的值吗?

 fullNameString = membership.Cells(nameRow, "A").Value 

你告诉它返回nameRow行的列A中的值,而nameRange返回的是对同一个单元格的引用,所以可以撤回那个值?