2017-04-06 67 views
0

我需要幫助控制嵌套的If ... then語句中的循環重複。我如何確保操作僅在i = 5和i = 6時發生一次?如何退出嵌套循環?

For i = 5 To 26 
    Set sht = wkbk.Sheets(i) 
    sht.Cells(3, 1).Value = "'" & StrConv(inputbx, vbProperCase) & " 2017" 
    If i = 5 Or 6 Then 
     Cells(7, 6).End(xlToRight).EntireColumn.Select 
     Selection.AutoFill Destination:=Range(Selection, Selection.Offset(0, 1)) 
    End If 
Next i 
+0

你的「只有一次i = 5和i = 6」是不明確的。我猜你的意思是「只有當我= 5 **和**當我= 6」,但它也可以被解釋爲「只有一次 - 無論是當我= 5 **或**當我= 6(但不適用於兩者)「。請確認你的意思。 – YowE3K

+0

如果你處於增量循環5到26,並且你只想在i = 5或6但只做一次時做某事,那麼當i = 6時永遠不會,因爲5總是會首先觸發它。我想你想在兩種情況下觸發它,這意味着在6之前你只需要'i ='。不要使用select,請查看Scotts的帖子以瞭解如何避免它。 –

回答

0

,如果你想,如果嵌套5和6只發生一次添加一個新的變量:

Dim to_work = true 
For i = 5 To 26 
    Set sht = wkbk.Sheets(i) 
    sht.Cells(3, 1).Value = "'" & StrConv(inputbx, vbProperCase) & " 2017" 
    If (i = 5 Or i = 6) and to_work Then 
     sht.Cells(7, 6).End(xlToRight).EntireColumn.Select 
     Selection.AutoFill Destination:=Range(Selection, Selection.Offset(0, 1)) 
     to_work = false 
    End If 
Next i 
+0

如果他們真的只想讓它發生一次,他們可以將'If'改成'If I = 5 Then'。 – YowE3K

+0

是的。或者在循環之外執行並從6開始.. –

+0

計算依賴關係**可能**要求它在循環內執行(很難從一段代碼中分辨出來),但是我試圖通過的主要觀點是不需要一個新的變量。 – YowE3K

1

更改,如果並確保您正在引用了正確的紙張:

Dim clm As Long 
For i = 5 To 26 
    With wkbk.Sheets(i) 
     .Cells(3, 1).Value = "'" & StrConv(inputbx, vbProperCase) & " 2017" 
     If i = 5 Or i = 6 Then 
      clm = .Cells(7, 6).End(xlToRight).Column 
      .Columns(clm).AutoFill Destination:=.Range(.Columns(clm), .Columns(clm).Offset(0, 1)) 
     End If 
    End With 
Next i