使用FOR LOOP的EXCEL VBA将忽略步骤+1循环计数器

我正在寻找一个解决scheme,将无视或退一步从循环计数器。 这是我的代码更好的理解。

Sub DownArrow5_Click() Dim c As Integer Dim copyFromRow As Integer copyFromRow = 1 For c = 1 To 20 If ActiveSheet.Rows(copyFromRow).Hidden = False And Range("A" & c & "").Value <> "" Then 'start copy paste ActiveSheet.Range("A" & copyFromRow & ", C" & copyFromRow & "").Copy Sheets("Sheet2").Select ActiveSheet.Range("A1").Select ActiveCell.Offset(1, 0).Select ActiveSheet.Paste ActiveCell.Offset(1, 0).Select Sheets("Sheet1").Select Application.CutCopyMode = False Else c = 'disregard the +1 for the loop End If Next c End Sub 

我不能减less计数器,因为它会产生一个负( – )的结果,从而返回一个无止境的循环。

注意:我需要将20个UNHIDDEN行复制并粘贴到sheet2。 这就是为什么我需要得到最大计数器(20)。 这只是我正在工作的一个简短的代码。

使用另一种types的循环:

 c = 1 Do If (condition) Then 'do stuff c = c+1 'increment your counter variable Else: 'presumably do nothing, ie, "Disregard" the loop. ' do NOT increment the counter variable in the Else block End If Loop While Not c > 20 

的确,在For...Next循环中操作循环计数器可能不是一个好主意。 你的代码片段并不清楚为什么你需要这样做,但是如果你需要在你的Else块的某个地方使用c - 1的值,可以使用c - 1 (不指定c )或者指定c - 1到另一个variables:

 Sub DownArrow5_Click() Dim c As Integer, d As Integer For c = 1 To 20 If (condition) then 'do stuff here Else d = c - 1 'some more stuff here using d End If Next End Sub 

UPDATE

现在,您已经编辑了更多细节的代码,我想你正在寻找这样的东西:

 While c <= 20 If Not ActiveSheet.Rows(copyFromRow).Hidden _ And Range("A" & c).Value <> vbNullString Then 'do your stuff c = c + 1 End If Wend 

请注意,VB有几个循环结构,也可以工作 – 任何在20次迭代中计算结果为False条件都可以,所以只要使用任何你认为更可读的条件:

 Do Until c = 21 ' until c = 20 would make it 19 iterations since c starts at 1 ... c = c + 1 Loop Do While Not c > 20 ... c = c + 1 Loop