2013-06-10 2 views
1

Я пытаюсь выполнить поиск, где он ищет по столбцу для «REQM» (без кавычек), и установить диапазон найденной ячейки в d. Затем вызовите другую подфункцию, которая находит, куда вводить данные. Моя подфункция FindEntryArea работает нормально, и мой первый поиск отлично работает, но когда он пытается найти, он работает неправильно.VBA .findnext не работает. Ошибка времени выполнения 91 объектная переменная или с переменной блока не установлена ​​

Sub FindLoop() 
Dim re as Range 
Set re = Sheets(1).Range("T:T") 

With re 
    Set d = .Find("REQM", LookIn:=xlFormulas, LookAt:=xlWhole) 
    MsgBox (d.Row) 
    Call FindEntryArea 
    Do 
     Set d = .FindNext(d) 
     MsgBox (d.Row) 
     Call FindEntryArea 
    Loop While Not d Is Nothing 
End With 


End Sub 

Пытаясь выяснить ошибку, я использовал MsgBox для вывода строки диапазона, который в настоящее время нашли это работало нормально для первой ячейки, но не работает для FindNext. Я получаю переменную объекта или с не заданной переменной блока. Я довольно новичок в VBA, и это мой первый опыт использования findnext, поэтому любое руководство будет оценено. Также re - мой диапазон, и есть много других ячеек, которые должны быть найдены внутри него.

Спасибо.

EDIT:

Главный код и findloop

Public re As Range 
Public d As variant 
Sub MainCode() 

Dim r as Range 
Set re = Worksheets("Summary all PIIDB").Range("T:T") 

Set r = Worksheets("Summary all PIIDB") 
With r 
    Call FindLoop 
End With 
End Sub 

Sub FindLoop() 

With re 
    Set d = .Find("REQM", LookIn:=xlFormulas, LookAt:=xlWhole) 
    MsgBox (d.Row) 
    'Call FindEntryArea 
     Set d = .FindNext(d) 
     MsgBox (d.Row) 
     'Call FindEntryArea 
End With 


End Sub 

Я снял петлю только, чтобы получить FindNext работать первый и пока я все еще борется.

ответ

0

Проблема в том, что вы никогда не устанавливали переменную «re» или «c» на что-либо. Вы действительно должны объявить все свои переменные перед их использованием, чтобы уменьшить количество ошибок. Попробуйте что-то вроде этого:

Sub FindLoop() 
    Dim prevSheet as Worksheet 
    Dim rng As Range 
    Dim fnd As Variant 
    Dim i As Long 

    prevSheet = ActiveSheet 
    Sheets(1).Select 

    'Column T - UsedRange 
    Set rng = Sheets(1).Range(Cells(1, 20), Cells(ActiveSheet.UsedRange.Rows.Count, 20)) 

    On Error GoTo Not_Found 
    i = rng.Find("REQM", LookIn:=xlFormulas, LookAt:=xlWhole).Row 
    On Error GoTo 0 

    With rng 
     Set fnd = .Find("REQM", LookIn:=xlFormulas, LookAt:=xlWhole) 
     Do 
      Set fnd = .FindNext(fnd) 
      Call FindEntryArea 
      MsgBox (fnd.Row) 
     Loop While i < fnd.Row 
    End With 
    prevSheet .select 

    Exit Sub 

Not_Found: 
    MsgBox """REQM"" not found." 
    prevSheet.Select 
    Exit Sub 
End Sub 

Edit: Я изменил код отправлен и он работает правильно для меня.

Option Explicit 
Public d As Variant 
Public re As Range 

Sub MainCode() 

    Dim r As Range 
    Set re = Worksheets("Summary all PIIDB").Range("T:T") 

    Set r = Worksheets("Summary all PIIDB").UsedRange 
    With r 
     Call FindLoop 
    End With 
End Sub 

Sub FindLoop() 
    On Error GoTo Not_Found 
    With re 
     Set d = .Find("REQM", LookIn:=xlFormulas, LookAt:=xlWhole) 
     MsgBox (d.row) 
     'Call FindEntryArea 
     Set d = .FindNext(d) 
     MsgBox (d.row) 
     'Call FindEntryArea 
    End With 
    On Error GoTo 0 
    Exit Sub 

Not_Found: 
    MsgBox ("REQM not found!") 
    Exit Sub 
End Sub 
+0

Loop While Not c Nothing, "c" никогда не определяется. – Ripster

+0

Я установил re в общедоступный диапазон и установил его в другой части моей программы, которую я не показывал. То, что я опубликовал, - это только одна процедура. Диапазон работает, потому что я получаю первый .find совершенный, но следующий никогда не устанавливается. – Mark

+0

Это еще одна ошибка с моей стороны, но я попытался исправить это, и у меня все еще есть ошибка. d не задается с .findnext по какой-то другой причине. – Mark

Смежные вопросы

 Смежные вопросы