我正在寻找一种能够忽略或从循环计数器退一步的解决方案。这是我的代码,以便更好地理解。
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
我不能递减计数器,因为它会产生负( - )结果,从而返回一个无休止的循环。
注意:我需要将20张UNHIDDEN行复制并粘贴到sheet2。这就是我需要获得Max计数器(20)的原因。这只是我工作的简短代码。
答案 0 :(得分:3)
实际上,在For...Next
循环中操纵循环计数器可能不是一个好主意。您的代码段不清楚为什么您需要执行此操作,但如果您需要在c - 1
块中的某处使用Else
的值,请使用{ {1}}(未指定c - 1
),或将c
分配给另一个变量:
c - 1
<强>更新强>
现在你已经编辑了更多细节的代码,我想你正在寻找这样的东西:
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
请注意,VB有几个可以正常工作的循环结构 - 任何在20次迭代时计算为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
的条件都可以,所以只需使用你觉得更具可读性的任何东西:
False
答案 1 :(得分:3)
使用其他类型的循环:
c = 1
Do
If (condition) Then
'do stuff
c = c+1 'increment your counter variable
Else:
'presumably do nothing, i.e., "Disregard" the loop.
' do NOT increment the counter variable in the Else block
End If
Loop While Not c > 20