2012-06-19 185 views
0

学习一些VBA。到目前为止,我已经构建这段代码应该让我(虽然它没有,还)做以下的事情:对象变量或变量未设置

  1. 获取在"M" & i细胞的数量(在第一次迭代是M5 )。
  2. 在A列中找到该号码。
  3. 一旦找到它,请将PutHereIfFound的值设置为与F6的值相同(因此为偏移量)。
  4. 如果找到一个数字,然后递增i,以便循环继续搜索M6,M7,...直到单元格M20。

它返回Run-Time Error 91,其代表Object Variable or With Variable not set。当我调试时,它指向Set PuthereIfFound行。

这个错误的原因是什么?

Sub FindThis() 
    Dim FindThis As Range 
    Dim PutHereIfFound As Range 
    Dim i As Integer 
    Dim f As Integer 

    i = 5 
    f = 5 
    Do 
     Set FindThis = ActiveSheet.Range("M" & i) 
     Set PutHereIfFound = ActiveSheet.Range("N" & i) 
      With ActiveSheet.Range("A:A") 
       Set PutHereIfFound = .Find(What:=FindThis, _ 
           After:=.Cells(.Cells.Count), _ 
           LookIn:=xlValues, _ 
           LookAt:=xlWhole, _ 
           SearchOrder:=xlByRows, _ 
           SearchDirection:=xlNext, _ 
           MatchCase:=False).Offset(0, 5) 

       If Not PutHereIfFound Is Nothing Then 
        i = i + 1 
       Else 
        i = i      
       End If          
      End With 
    Loop While i <= 20 
End Sub 
+0

可能有更好的方法来做到这一点。一旦你从'F'得到了值,你想做什么? –

+0

好吧 - 把它们放到PutHereIfFound中,这是循环第一次迭代中的N5。 – speci

+1

好的,如果我明白你想用Col F值填充COL N,如果找到匹配的话? –

回答

0

而且我的意见,你的代码可以这样进行优化。

Sub FindThis() 
    Dim ws As Worksheet 
    Dim FindThis As String 
    Dim aCell As Range 
    Dim i As Long 

    Set ws = Sheets("Sheet1") 

    With ws 
     For i = 5 To 20 
      FindThis = .Range("M" & i).Value 

      Set aCell = .Columns(1).Find(What:=FindThis, LookIn:=xlValues, _ 
      LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
      MatchCase:=False, SearchFormat:=False) 

      If Not aCell Is Nothing Then 
       '~~> Do whatever you want here with the F Value 
       PutHereIfFound = aCell.Offset(, 5).Value 

       Debug.Print PutHereIfFound 
      End If 
     Next i 
    End With 
End Sub 
0

在回答你关于Object Variable or With Variable Not Set错误的问题,这意味着FindThis没有被发现和Find返回Nothing

相关问题