Excel VBA:如果范围内找不到值,请转到

我正在使用下面的代码循环遍历工作表1-31按工作表(“RunFilter_2”)中单元格(“E1”)中的值筛选每个工作表,然后复制已筛选的范围并复制到工作表中的下一个空行“RunFilter_2”)。

没有find工作表(“RunFilter_2”)的值时的代码错误。活动工作表的第18列中的范围(“E1”)。

所以我添加了一个范围检查,检查是否在Range(“R:R”)列中find工作表(“RunFilter_2”)。Range(“E1”)。

但是,我如何转移到下一个我如果找不到什么?

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 

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` 

编辑..一些更多

尽pipe使用Goto语句通常被认为是不好的编程习惯,但在这种特定的情况下并不是这种情况。 它只是用来解决缺lessC语言和派生语言中存在的continue语句的问题。

你可以这样做:

 For I = 1 To WS_Count If rngFound Is Nothing Then goto NextIPlace your code NextIPlace: Next I 

但是你应该重新考虑这样的写作,使用GoTo并不是一个好的VBA练习。 整个代码应该改变。 点击这里查看 。 一旦你的代码工作,随时提交它在https://codereview.stackexchange.com/ ,他们会给你很好的想法。

这里不需要使用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块中。 你的post中的代码有点乱,我没有花时间去完整剖析。

你应该Next I之前添加一个标记

 MARKER: Next I 

所以If rngFound Is Nothing Then你添加GoTo MARKER