Excel-VBA ZelleListe von gestückeltem Bereich: ist das ein Bug oder mache ich was falsch?

... komplette Frage anzeigen

2 Antworten

Ich habe jetzt keine Lust, mich da intensiv reinzuarbeiten, aber wenn Du mit Leere schon eine Range für alle leeren Zellen hast, könntest Du mit:
Dim Zelle as Range
....
For each Zelle in Leere
...
Next Zelle

eine Schleife dadurch bauen.
Vielleicht hilft Dir das ja weiter.
Kann aber auch sein, das ich das ganze falsch verstanden habe.

P.S.:
Wenn Du den VBA-Code hier direkt reinkopierst, markierst und dann oben auf "Codebeispiel einfügen" klickst, wird er sehr schön formatiert hier eingefügt.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Iamiam
02.10.2016, 22:07

Codebeispiel in GF: Ich mag das nicht, weil ich da nie die ganze Zeile sehe sondern bei längeren Befehlen immer scrollen muss. Auch so kann man den Code kopieren und ins Modul einfügen (die Punkte verschwinden, die gesetzten Umbrüche bleiben und bei längeren Befehlen hat man alles auf einmal im Blickfeld)

Zur Sache: ich rufe das Makro für jede Zelle per zugewiesenem Knopf (formatiertes Textfeld) neu auf. Der Kombibereich Leere wird also jedesmal neu erstellt, und zwar richtig, siehe Protokoll. Auch die Anzahl der Blanks stimmt (linke Zahl). Ich weiß also nicht, wo ich da eine Schleife einbauen soll und was die bewirken könnte.

Aber das statistische Ansprechen der ZelleListe dieses Kombibereichs (also der Blanks) liefert falsche Positionen, die häufig sogar ausserhalb aller Teilbereiche liegen und innerhalb auch Nichtleere betreffen -- das ist mir ein Rätsel!

Und obendrein eines, für das ich keine Umgehungsmöglichkeit sehe ausser über die statistische Benennung aller Zellen des Bereichs und nochmalige Wahl, wenn schon gefüllt.

Am Anfang wäre das kein Problem, aber bei größeren Bereichen, zB 900Zellen(30x30) braucht das für die letzte Zelle im Durchschnitt 900x so lang wie für die erste, das wollte ich vermeiden

1

Ich kann bisher leider nur beitragen, dass es bei mir in gleicher Weise nicht funktioniert, Excel 2010. Ab dem 3. oder 4. Durchlauf wird auch außerhalb des Bereichs geschrieben - ab ddiesem ersten "Fehleintrag" kommen die Ergebnisse bei mir nur noch in einer Spalte.

Es scheint mit dem "gestückelten Bereich" recht schnell zu Fehlern zu kommen, denn auch wenn man nur eine Zeile A1:D1 als Range definiert tritt das Phänomen auf.

Wenn ich testweise den Range mal in einer for schleife aufgebaut habe

For Each zelle In gesamtbereich
If zelle.Value = "" Then Set freierbereich = Application.Union(freierbereich, zelle)
Next zelle

Getestet bei einem Bereich A1:D100 und 300 Wiederholungen werden die Treffer alle innerhalb des zulässigen Range geschrieben (soweit gut), allerdings werden dennoch Werte überschrieben, ca. 1/3, also nicht akzeptabel.

Mir fällt nichts wirklich anderes ein, als dann doch auf value="" zu prüfen. Die Performance lässt sich sicherlich optimieren, wenn man nicht den gesamten Bereich in der Schleife prüft, sondern erst in der "Zielzeile"

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Iamiam
03.10.2016, 14:31

danke für Deine Mühe. Vllt gibt das einen neuen Denkanstoß.

Hab zum Bug noch was in einem Kommentar zu Oubyi geschrieben

Vor kurzem hatte jemand hier eine Frage mit Teilbereichen eingestellt: kannst du Diuch erinnern, welche?

0
Kommentar von Oubyi
03.10.2016, 14:36

lamiams Idee mit:

Set Leere = Range("FüllBereich").SpecialCells(xlCellTypeBlanks)

funktioniert aber imho sehr gut.
Nur, dass .Cells(n) fehlerhaft arbeitet.
Aber immerhin spart man sich dadurch immer den gesamten Bereich durchlaufen zu müssen.

0

Was möchtest Du wissen?