2012-02-10 115 views
0

我想通過檢查「新數據」文件中的表來找出一種方法來在我的「系統文件」中的單元上運行Vlookup。但是,如果出現#N/A錯誤,我希望單元格的值保持不變。我已經提出了以下內容,但是,我一直在收到「Next for For」錯誤。是否有可能轉義嵌套For Next循環?Next無For Excel嵌套循環中的錯誤VBA

的文藝青年最愛的語義版本:

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 

當然的***秒實際上並不在那裏。有關我如何完成此任務的任何想法? 在此先感謝

回答

7
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

+1。這是正確的方法時使用.FIND – 2012-02-10 02:30:28

+0

+1最佳方法 – brettdj 2012-02-10 04:05:01

+0

這種方法絕對有效,所以非常感謝你!我想我只是覺得NOT NOT = True的測試邏輯流程不雅觀。 – 2012-02-10 15:35:30

1

使用

 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 
+0

我以爲這被認爲是不好的做法,使用「轉到」語句?同時,這是一種不同的方法,它允許我想到的邏輯流程。 – 2012-02-10 15:27:06

+1

對我來說最好的做法是有效的:),在這種情況下會很好。 – 2012-02-10 16:06:17

1

退出對於結束for循環的初期電流(內一個你的情況)。

+0

他不想終止for循環,他想跳到下一次迭代。 – mischab1 2012-02-10 01:45:13