对象变量或未设置变量

时间:2012-06-19 12:49:44

标签: vba excel-vba excel

学习一些VBA。到目前为止,我已经构建了这段代码,这些代码应该允许我(尽管它还没有)执行以下操作:

  1. 获取"M" & i单元格中的数字(在第一次迭代中为M5)。
  2. 在A栏中找到该号码。
  3. 找到后,将PutHereIfFound的值设置为与F6的值相同(因此为偏移量)。
  4. 如果找到一个数字,则递增i,以便循环继续搜索M6,M7,...直到单元格M20。
  5. 它返回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
    

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

在回答有关Object Variable or With Variable Not Set错误的问题时,表示找不到FindThisFind返回Nothing