2015-10-23 68 views
2

我在Excel VBA中有一个宏给我一个错误。我在启动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的方式吗?

+0

这可能是'.Find(...)'在前面的线方法没有找到任何东西。在这种情况下,'nameRange'将被设置为'Nothing'。你可以添加一些代码来测试/处理它。 – xidgel

+0

不是,这很可能是因为你的'.Find'方法没有找到结果并返回'Nothing',所以你有错误!在你的'Set nameRange','MsgBox membership.Range(“A:A”)。Find(“user -name”)是Nothing'之前加上这行,如果它显示'True',find方法找不到任何东西,如果它是'假'这个问题在别的地方! ;) – R3uK

回答

2

在代码中有后续Find操作,该代码仅指定查看整个单元格。此设置将持续存在,所以你可能只需要指定不看整个小区在第一Find电话:

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

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

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

检查nameRange返回的引用,(我认为),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返回一个引用到同一细胞中,从而可以直接拉回来的那个值?

相关问题