Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1548to1552
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

2 For Each Schleifen mit Array

2 For Each Schleifen mit Array
27.03.2017 13:56:30
Matthias
Hey liebe Experten :)
ich hab folgenden Code geschrieben:
SpArray = Array(2,4,6,7,8)

For Each wks In wb.Worksheets
Prüf = False
If Abfrage Then
ZlArray = Array(1,5,7,8,9,14)
Elseif AbfrageSonst Then
ZlArray = Array(3,6,7,15)
End If
With wks
For Each Row In ZlArray
For Each Column In SpArray
If Not .Cells(Row, Column) = 0 Then
Prüf = True
Exit For
Exit For
End If
Next Column
Next Row
If Prüf = False Then
.Delete
End If
End With
Dabei muss der Fehler iwie in der Verschachtelung der beiden For each (Row und Column) Schleifen stecken denn wenn ich die erste mit einer For To Schleife probiere dann klappt es.... leider versteh ich nicht genau wo der Fehler steckt und VBA gibt auch keinen Fehler aus -_-
Mit For To geht leider nicht da es 2 verschiedene Varianten gibt und Lücken in den zu prüfenden Zeilen und Spalten sind
Hoffe ihr könnt mir helfen :)
Vielen Dank im Vorraus
Matthias

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: 2 For Each Schleifen mit Array
27.03.2017 14:19:06
Mullit
Hallo,
die Lücken sind doch völlig egal, Du fragst einfach mit For To Next bis zum Ubound Deiner Variant-Arrays ab, Exit For darfst Du nicht zweimal in derselben Schleife setzen, in der äußeren prüfst Du nochmal auf Prüf = True und setzt es dort ein zweites Mal....
Gruß, Mullit
AW: 2 For Each Schleifen mit Array
27.03.2017 14:27:24
Mullit
Hallo nochmal,
ah ja und ich seh grad, setz erstmal Option Explicit über Deinen Code und hol die Variablen-Deklaration nach, Row und Column sind VBA-Schlüsselwörter >>> nix gut, die mußt Du umbenennen...
Gruß, Mullit
AW: 2 For Each Schleifen mit Array
27.03.2017 15:02:27
Matthias
Also erstmal Danke
die ganzen Deklarationen hab ich hier weggelassen da der Code denke ich auch so verständlich ist und dadurch das ganze in die länge gezogen wird und unübersichtlicher (ist halt auch nur ein Ausschnitt aus dem code) :) Explicit verwende ich - Danke für den Hinweis mit Row und Column, das wusste ich noch nicht & auch das mit Exit For hab ich erledigt
Ubound hab ich bisher noch nie genutzt und ich hab es mal versucht einzubauen aber es läuft noch nicht :( habe jetzt erstmal eingestellt das es die Tabellenblätter blau einfärbt und es werden falsche eingefärbt...
    For Each wks In wb.Worksheets
Prüf = False
With wks
If Left(.Cells(ZlPrüfPF, SpPrüf).Value, 3) = "TXT" Then
ZlArray = Array(8, 9, 10)
Else
ZlArray = Array(10, 11, 12)
End If
For Reihe = UBound(ZlArray, 1) To UBound(ZlArray)
For Each Spalten In SpArray
If Not .Cells(Reihe, Spalten) = 0 Then
Prüf = True
Exit For
End If
Next Spalten
If Prüf = True Then
Exit For
End If
Next Reihe
If Prüf = False Then
.Tab.ColorIndex = 5
End If
Wo liegt der Fehler oder hab ich dich falsch verstanden?
Danke
Anzeige
AW: 2 For Each Schleifen mit Array
27.03.2017 16:20:37
ChrisL
Hi Matthias

For Reihe = 0 To UBound(ZlArray)
For Spalten = 0 To UBound(SpArray)
If Not .Cells(ZlArray(Reihe), SpArray(Spalten)) = 0 Then
End If
Next Spalten
Next Reihe
cu
Chris
AW: 2 For Each Schleifen mit Array
28.03.2017 10:13:58
Matthias
Hey Chris
Danke, also es läuft zwar ohne Fehler aber es klappt nicht
Daher jetzt noch eine Frage, druchläuft die schleife jetzt wirklich nur die im Array angegebenen Elemente? oder werden die Elemente aufgefüllt also bspw. Array(1,2,5,6) wird dann nur 1,2,5,6 durchlaufen oder nimmt der dann auch die 3 & 4?
Also ich versteh es leider noch nicht so ganz :( ich hab quasi eine reihe die durchlaufen werden soll mit Lücken drinne und daher dachte ich geht das über nen Array aber evtl ist dieser Ansatz ja schon falsch? [die Lücken sind nicht regelmäßig]
Grüße
Matthias
Anzeige
AW: 2 For Each Schleifen mit Array
28.03.2017 10:43:34
Matthias
Hey
ich glaub ich hab eine Lösung gefunden :)

For i = 0 To 5
Reihe = ZlArray(i)
For j = 0 To 4
Spalten = SpArray(j)
If Not .Cells(Reihe, Spalten) = 0 Then
Prüf = True
Exit For
End If
Next j
If Prüf = True Then
Exit For
End If
Next i
Aber trotzdem die Frage gäbe es denn einen eleganteren Ansatz?
Grüße Matthias
AW: 2 For Each Schleifen mit Array
28.03.2017 17:50:16
ChrisL
Hi Matthias
Deine und meine Lösung sind grundsätzlich identisch. Du übergibst die Zeilennummer einfach vorher noch an eine Variable:
Reihe = ZlArray(i)
.Cells(Reihe, ...)
vs.
.Cells(ZlArray(i), ...)
In deinem Code würde ich einzig noch UBound (= Array-Grösse resp. -Dimensionierung) verwenden. Wenn neue Werte dazu kommen, musst du so nur noch das Array, nicht aber den Rest vom Code anpassen.
For i = 0 To UBound(ZlArray)
Was in meinem Beispiel vielleicht für Verwirrung gesorgt hat, ist dass ich aus Bequemlichkeit die Variablen "Reihe" und "Spalten" wiederverwendet habe. Die Bezeichnungen sind ungeschickt, weil der Wert von der Schleife stammt (0, 1, 2...) und damit nicht die Zeilen- und Spaltennummer repräsentiert hat. Normalersweise würde ich Schleifen auch mit einer Variable "i" durchlaufen.
cu
Chris
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige