Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1432to1436
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

For Each...Next-Anweisung läuft nicht mehr richtig

For Each...Next-Anweisung läuft nicht mehr richtig
23.06.2015 19:28:51
Friedhelm
Hallo,
ich hatte von Tino am 22.04.2014 22:02:04 eine Hilfe bekommen die ich mit der For Each...Next Anweisung super lösen konnte.
Sub test()
Dim Re_Nr(), ArData, rng As Range
Dim n&, nn&
For Each rng In Tabelle1.AutoFilter.Range.SpecialCells(xlCellTypeVisible).Areas
ArData = rng.Columns(2).Resize(, 2) 'Spalte mit RE-Nr Angeben
Redim Preserve Re_Nr(Ubound(ArData) + nn - 2)
For n = 1 To Ubound(ArData)
If nn > 0 Then
Re_Nr(nn - 1) = ArData(n, 1)
End If
nn = nn + 1
Next n
Next rng
'Ausgabe
For n = Lbound(Re_Nr) To Ubound(Re_Nr)
MsgBox Re_Nr(n)
Next n
End Sub

Ich hatte eine Erweiterung, durch Eingefügen einer Spalte, in der betroffenen Tabelle gemacht, aber außerhalb des Bereiches, der von der Anweisung genutzt wird (.Columns(4).Resize(,3) ).
Folgendes ist mir aufgefallen:
Wenn ich im Modul mit dem Curser über den Programmcode gehe, wird bei den Variablen, wenn vorhanden, der Wert angezeigt. In diesem Fall wird jetzt bei:
For Each rng In Tabe.....
der rng Wert: nothing angezeigt.
In der alten Version war das nicht.
Die Auswirkung in der neuen Version: die For Each...Next Anweisung wird zunächst komplett durchlaufen, die Daten richtig eingelesen, dann ist der Wert "nothing" bei rng weg, die Anweisung wird noch mal durchlaufen aber mit Werten, die irgendwo her kommen für mich aber nicht nachvollziehbar sind.
Eine Bsp Datei konnte ich nicht erstellen, da der Fehler dort nicht auftritt.
Ich hoffe das aus diesem Ganzen jemand schlau wird und mir helfen kann.
Schönen Gruß
Friedhelm

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Da musst du wohl einiges überprüfen, ...
23.06.2015 21:54:18
Luc:-?
…Friedhelm:
1. Ist Tabelle1 immer noch das relevante Blatt?
2. Sind evtl alle Zellen sichtbar? Dann gibt's nur eine Area.
3. Für ArData wdn 2 Spalten ab Spalte 2 eines zusammenhängenden Bereichs sichtbarer Zellen festgelegt. Hat sich die strukturelle Organisation der sichtbaren Zellen durch das Einfügen einer Spalte verändert? Nebenbei, das Pgm nutzt primär das ganze Blatt, insofern kann das Einfügen Auswirkungen haben.
4. Wenn der Autofilter sichtbare Zellen findet, sollte unmittelbar nach Schleifenstart rng nicht Nothing sein; nach Schleifenende wird rng aber automatisch auf Nothing gesetzt.
5. Es kann sein, dass das Pgm 2× abgearbeitet wird. Das könnte mit der Calc-Engine ab Xl10/XP zusammenhängen. Unter Xl12/2007 habe ich das bei Fktt beobachten können, wobei hier zuerst auch mit leeren Werten agiert wurde. Evtl liegt das aber auch an eingestellter Iteration.
Fazit: Was nun tatsächlich los ist, kann ich so nicht feststellen. Evtl kommen dem Pgm Berechnungen in die Quere.
Tipp: Versuche es mal mit abgeschalteter Berechnungsautomatik.
Gruß, Luc :-?
Besser informiert mit …

Anzeige
AW: Da musst du wohl einiges überprüfen, ...
23.06.2015 23:04:43
Friedhelm
Hallo Luc,
danke für deine Hife.
zu 1: das richtige Tabellenblatt ist es geblieben.
zu 2: Die Spalten AC - AG sind ausgeblendet. Ich habe sie eingeblendet und es läuft.
Hier scheint der Fehler zu liegen. Gibt es einen Unterschied wenn die Spalten auf 0 Pixel gestellt wird oder ausgeblendet wird? Wenn ich die Spalten auf 1 Pixel stelle läuft es richtig.
Friedhelm

AW: Da musst du wohl einiges überprüfen, ...
23.06.2015 23:28:12
Werner
Hallo Friedhelm,
wenn es an den ausgeblendeten Spalten liegt, dann kannst du die Spalten zu Beginn deines Codes doch einblenden und nach Durchlauf des Codes wieder ausblenden.
Gruß Werner

Anzeige
AW: Unterschied zwischen ein- und ausgeblendet
24.06.2015 00:32:20
Daniel
Hi
da ist schon ein Unterschied, ob du ausblendest oder nur die Pixelzahl sehr klein stellst.
schließlich arbeitest du mit .SpecialCells(xlcelltypevisible).Areas
wenn du nämlich auch Spalten zwischen drin ausblendest, ist hier eine Grenze für deine Areas.
dh wenn du AC:AG sichtbar hast bekommst du eine Area über alle Spalten, wenn du sie ausgeblendet hast, zwei Areas, eine für die Spalten A:AB und eine für die zur Tabelle gehörenden Spalten ab AF.
Gruß Daniel

AW: Tipp 2
23.06.2015 22:28:25
Gerd
Hallo Friedhelm,
lade doch eine Beispieldatei hoch.
Gruß Gerd

Sagt er doch - Fehler tritt da nicht auf, Gerd!
24.06.2015 03:51:40
Luc:-?
Evtl ist die Mappe jetzt korrupt, Friedhelm,
und du musst sie reparieren bzw neu anlegen?! Mehrere Areas sieht Tinos Pgm jedenfalls in For Each vor…
Aus der Ferne ist da leider schlecht raten!
Morrn, Luc :-?

Anzeige
AW: Sagt er doch - Fehler tritt da nicht auf, Gerd!
24.06.2015 11:52:26
Friedhelm
Hallo
vielen Dank an alle, die sich mit dem Thema beschäftigt haben.
Luc: Wenn die Mappe korrupt ist, wird irgendwann irgendwas nicht mehr richtig laufen. kann ich das irgendwie feststellen?
Lässt sich Tinos Pgm in For Each auf ein Area ändern? Ich möchte ja nur die Spalte D in gefilterter Form laden.
Werner: Das ist sicherlich auch eine Möglichkeit das Problem zu umgehen, vielen Dank für den Tip
Gruß Friedhelm

AW: Sagt er doch - Fehler tritt da nicht auf, Gerd!
24.06.2015 12:39:06
Daniel
Hi
nur die gefilterte Spalte D:
For Each rng In Intersect(Tabelle1.AutoFilter.Range.EntireRow, Tabelle1.Columns(4)). _
SpecialCells(xlCellTypeVisible).Areas
damit enthält dann rng immer den nächsten sichtbaren Block aus Spalte D im Bereich des Autofilters.
Gruß Daniel

Anzeige
AW: Ach so
25.06.2015 00:45:19
Gerd
Hallo Friedhelm!
Sub D_im_Filter_sichtbar()
Dim Re_Nr(), X As Range
Dim a As Long, b As Long, n As Long
Set X = Intersect(Tabelle1.Columns(4), Tabelle1.AutoFilter.Range)
For a = X.Row + 1 To X.Rows.Count - X.Row + 1
If Rows(a).Height > 0 Then
ReDim Preserve Re_Nr(b)
Re_Nr(b) = X.Cells(a, 1)
b = b + 1
End If
Next
'Ausgabe
For n = LBound(Re_Nr) To UBound(Re_Nr)
MsgBox Re_Nr(n)
Next n
Set X = Nothing
End Sub
Gruß Gerd

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige