2014-10-20 3 views
0

Я использую этот цикл для поиска значений. .Find работает, но findNext не делает, омминг многих значений. Здесь я бросаю свой код, есть ли у вас какие-либо советы? Большое спасибо!!.FindNext в цикле не работает

For Each ws In SourceWb.Worksheets 
    If IsNumeric(Left(ws.Name, 3)) Then 
     Set gCell = ws.Columns(6).Find(what:=numdoc, LookIn:=xlValues, lookat:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False, searchformat:=False) 
     If Not gCell Is Nothing And IsNumeric(Left(gCell.Parent.Name, 3)) Then 

      firstAddress = gCell.Address 

      Do 
       repetidos = repetidos + 1 
       finalcell = gCell.Address 
       'merged cells code here not displayed 
       oldaddress = gCell.Address 
       '>Having trouble here> ** 
       Set gCell = ws.Columns(6).FindNext(after:=gCell) 
       '** 


      Loop Until gCell.Address = oldaddress 
     End If 
    End If 
Next ws 
+0

Вы компилируете для вас? Я получаю ошибку компиляции 'Next without For'. –

+0

Да, возможно, я мог бы исправить конец, если при создании сообщения попробуйте удалить это кодовое предложение: Если firstAddress <> oldaddress Then – Chakal

+0

Как вы объявили переменные? Я не думаю, что это проблема, но мне трудно попытаться воспроизвести вашу проблему. Вы посмотрели на логику в вашей «Do ... Loop»? –

ответ

0

Это было лучшее, что я мог бы извлечь из ваших подсказок:

Option Explicit 

Sub Test() 
Dim WS As Worksheet 
Dim SourceWB As Workbook 
Dim numdoc As Long 
Dim gCell As Range 
Dim firstAddress As String 
Dim oldaddress As String 
Dim finalcell As String 
Dim repetidos As Long 

Set SourceWB = ThisWorkbook 'added for clarity and safety 
numdoc = 456 
    For Each WS In SourceWB.Worksheets 
     If IsNumeric(Left(WS.Name, 3)) Then 'OK I had to save it as "123 A" 
      Set gCell = WS.Columns(6).Find(what:=numdoc, _ 
       LookIn:=xlValues, _ 
       lookat:=xlWhole, _ 
       SearchOrder:=xlByRows, _ 
       MatchCase:=False, _ 
       searchformat:=False) 
      If Not gCell Is Nothing And IsNumeric(Left(gCell.Parent.Name, 3)) Then 
       firstAddress = gCell.Address 
       Set gCell = WS.Columns(6).FindNext(after:=gCell) 
       Do 
        repetidos = repetidos + 1 
        finalcell = gCell.Address 
        'merged cells code here not displayed 
        oldaddress = gCell.Address 
       Loop Until gCell.Address = oldaddress 
      End If 
     End If 
    Next WS 
End Sub 

Не уверен, что, если он отвечает на вопрос, но он действительно демонстрирует отступа.

Там, вероятно, есть место для With...End With, но я слишком устал, чтобы его искать.

+0

Возможно, что (с) я буду искать его и попытаться поместить его раньше для каждого ws в sourcewb.worksheets. Большое спасибо, но – Chakal

+0

Попробуйте как можно больше в своей структуре, как можете. Не забудьте о точках '.' –

+0

Тик будет приятным :) –

0
This seems to work at this point. 

For Each WS In SourceWB.Worksheets 
    With ws.Range("F:F") 
    If IsNumeric(Left(WS.Name, 3)) Then 'OK I had to save it as "123 A" 
     Set gCell = .Find(what:=numdoc, _ 
      LookIn:=xlValues, _ 
      lookat:=xlWhole, _ 
      SearchOrder:=xlByRows, _ 
      MatchCase:=False, _ 
      searchformat:=False) 
     If Not gCell Is Nothing And IsNumeric(Left(gCell.Parent.Name, 3)) Then 
      firstAddress = gCell.Address 
      Set gCell = .FindNext(after:=gCell) 
      Do 


       'merged cells code here not displayed 

      Loop While Not gCell Is Nothing And gCell.Address <> firstAddress 
     End If 
    End If 
end with 
Next WS 
Смежные вопросы