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

时间:2017-03-01 13:44:38

标签: excel vba excel-vba

我使用以下代码循环显示工作表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

4 个答案:

答案 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