我使用以下代码循环显示工作表1-31,按照工作表中单元格中的值(" E1")过滤每个工作表(" RunFilter_2")然后复制过滤后的范围并复制到工作表中的下一个空行(" RunFilter_2")。
代码错误时,它找不到工作表的值(" RunFilter_2")。活动工作表的第18列中的范围(" E1")。
所以我添加了一个范围检查,检查是否有工作表(" RunFilter_2")。范围(" E1")。值在列范围内找到(" R: R"。)
但是,如何移动到下一个如果rngFound什么都没有?
Sub RunFilter2()
Rows("5:5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp
Range("A1").Select
Dim wb As Workbook
Dim ws As Worksheet
Set wb = ActiveWorkbook
Set ws = wb.sheets("01")
Dim WS_Count As Integer
Dim I As Integer
WS_Count = ActiveWorkbook.Worksheets.Count - 3
For I = 1 To WS_Count
Dim LastRow As Long
LastRow = ActiveSheet.UsedRange.Rows.Count
sheets(I).Select
Columns("A:U").Select
Dim rng As Range
Dim rngFound As Range
Set rng = Range("R:R")
Set rngFound = rng.Find(sheets("RunFilter_2").Range("E1").Value)
If rngFound Is Nothing Then
'----------------------------------
' How do I code ... GO TO Next I
'----------------------------------
Else:
Selection.AutoFilter
ActiveSheet.Range("$A$1:$U" & LastRow).AutoFilter Field:=18, Criteria1:=sheets("RunFilter_2").Range("E1").Value
Range("A1").Offset(1, 0).Select
Rows(ActiveCell.Row).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
sheets("RunFilter_2").Select
If Range("A4").Value = "" Then
Range("A4").Select
Else
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select
End If
ActiveSheet.Paste
ws.Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("A1").Select
sheets("RunFilter_2").Select
Next I
End Sub
答案 0 :(得分:5)
你可以这样做:
For I = 1 To WS_Count
If rngFound Is Nothing Then goto NextIPlace
your code
NextIPlace:
Next I
但你应该重新考虑这样的写作,使用GoTo
不是一个好的VBA练习。整个代码应该改变。 Check more here。一旦您的代码有效,请随时在https://codereview.stackexchange.com/提交,他们会给您很好的建议。
答案 1 :(得分:3)
在Next I
之前放置一些标签:
NextI:
Next I
然后你可以这样做:
If rngFound Is Nothing Then
Goto NextI
Else
....
或者你可以简化它而不需要else语句
If rngFound Is Nothing Then Goto NextI
.... ' Proceed without the need for `Else` and `End If`
编辑..还有更多
虽然使用Goto
语句通常被认为是不好的编程习惯,但在这种特定情况下并非如此。它仅用作缺少C语言和派生语言中存在的continue
语句的解决方法。
答案 2 :(得分:3)
此处无需使用GoTo
。完成此任务的简单方法如下:
For I = 1 To WS_Count
' do stuff
If Not rngFound is Nothing
'execute desired action
End If
' do more stuff
Next i
如果需要,您也可以将do more stuff
放在第一个if块中。你帖子中的代码有点混乱,我没有花时间充分剖析。
答案 3 :(得分:2)
您应该在Next I
MARKER:
Next I
在If rngFound Is Nothing Then
之后添加GoTo MARKER