Excel-VBA: Wenn Wert nicht gefunden, in Reichweite, gehen Sie zu
Ich bin mit dem folgenden code, um eine Schleife durch Blätter 1-31 filtern jedes Blatt, indem Sie den Wert in einer Zelle("E1") in sheets("RunFilter_2") und kopieren Sie dann den gefilterten Bereich und kopiere die nächste leere Zeile in Blatt("RunFilter_2").
Den Fehler code, wenn es nicht an den Wert sheets("RunFilter_2").Range("E1") in Spalte 18 das aktive Blatt.
Also habe ich ein range-check, der prüft, ob sheets("RunFilter_2").Range("E1").Wert findet sich in Spalte Range("R:R").
Aber, wie kann ich bewegen auf die Nächste, die ich, Wenn rngFound Nichts?
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ort einige Labels vor
Next I
:Dann können Sie dies tun:
Alternativ können Sie vereinfachen, ohne die else-Anweisung
BEARBEITEN.. Einige mehr
Während es im Allgemeinen als schlechter Programmierstil zu verwenden
Goto
Aussagen, es ist nicht der Fall in dieser konkreten situation. Es ist nur ein workaround für das fehlen dercontinue
Aussage, dass es in der C-und abgeleiteten Sprachen.Kannst du es so machen:
Aber sollten Sie überdenken, schreiben wie diese, ist es nicht ein gutes VBA-Praxis zu verwenden
GoTo
. Der ganze code sollte geändert werden. Überprüfen Sie hier mehr. Sobald Ihr code funktioniert, fühlen Sie sich frei, um senden Sie es an https://codereview.stackexchange.com/, Sie würde Ihnen gute Ideen.Goto
Aussagen ist nicht ein guter Programmierstil, aber nicht in diesem speziellen Fall. Andere Sprachen haben in der Regel-Anweisung break-oder continue-loops (alsocontinue
in der C-Familie). VBA nicht mit dieser option wird manchmal mühsam und verwenden diese Problemumgehung kann den code mehr readabale. Nur meiner bescheidenen Meinung nach 🙂GoTo
mehr als oft, ich würde nie Zustimmen. Und ja, VBA muss einen Weg zu brechen, Schleifen.Gibt es keine Notwendigkeit zu verwenden
GoTo
hier. Der einfache Weg, dies zu erreichen ist mit dem folgenden:Können Sie auch die
do more stuff
innerhalb des ersten if-block, wenn nötig. Der code in deinem post war ein bisschen chaotisch und ich habe nicht die Zeit nehmen, zu sezieren voll.doing more stuff
Bezug auf die Struktur des OP! 😉sollten Sie einen marker hinzufügen, bevor
Next I
So, nachdem
If rngFound Is Nothing Then
fügen SieGoTo MARKER