Далее без Для ошибки во вложенном цикле в Excel VBA - PullRequest
0 голосов
/ 10 февраля 2012

Я пытаюсь найти способ запустить Vlookup для ячейки в моем «Системном файле», проверив таблицу в файле «Новые данные».ОДНАКО, если есть ошибка # N / A, я хочу, чтобы значения ячеек оставались неизменными.Я пришел к следующему, однако я получаю ошибку «Далее без For».Можно ли избежать вложенного цикла For Next?

Семантическая версия tl; dr:

   For i 1 to 10
       For j 1 to 3 
          Something with .Cells(i,j) 
          Set range X = .Find(thing
          If X = Nothing Then
            Next j *** <THIS IS WHERE MY ERROR IS THROWN
          Else
            -Do Something with X-
          End if
       Next j
   Next i

Мой более или менее актуальный код выглядит следующим образом:

Sub Thing()
    Dim SysWS As Worksheet
    Dim NewDataWS As Worksheet
        Dim NDSKUs As Range   ' This is set to the first column of the NewDataWS
        Dim NDMonthsRow As Range ' This is set to the first row of the NewDataWS      
    Dim SKU2look4 As String, Month2look4 As String        
        Dim ifoundtheSKU As Range 'the result of finding SKU2look4 inside of NDSKUs range
        Dim ifoundtheDate As Range 'the result of finding Month2look4 inside of NDMonthsRow range
    Dim i As Integer, j As Integer
    Dim workzone As Range 'The Cell being evaluated 
For i = 2 To SysWS.UsedRange.Columns.Count
  For j = 2 To SysWS.UsedRange.Rows.Count
     Set workzone = SysWS.Cells(j, i)
        SKU2look4 = SysWS.Cells(j, 1) 'SKUs are along the left column
        Month2look4 = SysWS.Cells(1, i) 'Dates are along the top row

'1-Find the right Date Column for extraction
    Set ifoundtheDate = NDMonthsRow.Find(What:=Month2look4, LookIn:=xlValues, _
                    LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                    MatchCase:=False, SearchFormat:=False)
        If ifoundtheDate Is Nothing Then
                    Debug.Print (Month2look4 & " -Date NOT Found in New Date File")
                    ******Next j******
        Else
                    Debug.Print ("ifoundtheDate:" & ifoundtheDate.Address)
        End If
'2-Find the row
    Set ifoundtheSKU = NDSKUs.Find(What:=SKU2look4, LookIn:=xlValues, _
                    LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                    MatchCase:=False, SearchFormat:=False)
        If ifoundtheSKU Is Nothing Then
                    Debug.Print (SKU2look4 & " Not Found in the New Data File")
                    *********Next j******
            Else
                    Debug.Print ("ifoundtheSKU:" & ifoundtheSKU.Address)
        End If

'Set the "workzone" cell's value to that of the found row offset by the found column
                workzone = ifoundtheSKU.Offset(, (ifoundtheDate.Column - 1))
    Next j
Next i

Конечно, *** там на самом деле нет.Любые мысли о том, как я могу это сделать?Заранее спасибо

Ответы [ 3 ]

7 голосов
/ 10 февраля 2012
For i = 1 to 10        
   For j = 1 to 3

     Something with .Cells(i,j) 

     Set rngX = .Find(thing)           
     If Not rngX Is Nothing Then

       Set rngY = .Find(thingelse)
       If Not rngY Is Nothing Then
          'something with rngX and rngY
       End If 

     End if

   Next j    
Next i
1 голос
/ 10 февраля 2012

Exit For прерывает ток для цикла раньше (внутренний в вашем случае).

1 голос
/ 10 февраля 2012

Использование

       For i=1 to 10
           For j=1 to 3 
              Something with .Cells(i,j) 
              Set range X = .Find(thing
              If X = Nothing Then
                Goto Nextj *** <THIS IS WHERE MY ERROR IS THROWN
              Else
                -Do Something with X-
              End if
NextJ:
           Next j
       Next i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...