Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1768to1772
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

Rätselhaftes Range.Find

Rätselhaftes Range.Find
16.07.2020 00:10:04
Thomas
Hallo
verstehe Range.Find nicht. Bitte um Aufklärung.
Was macht folgendes Makro? Es reagiert in verschiedenen Situationen unterschiedlich. Ich denke, es soll die Zeilennummer der ersten leeren Zelle der Spalte B ausgeben.
Makro steht in einem allgemeinen Modul:
Sub Finden()
Debug.Print Columns(2).Find("").Row
End Sub

Sit. (1): Wenn ich es in einer leeren, frischen, neuen Datei starte, kommt seltsamerweise eine Fehlermeldung.
Sit. (2): Wenn ich dann B1:B5 mit Werten befülle, liefert das Makro eine 6. Das ist klar.
Sit. (3): Wenn ich dann diese Werte wieder lösche, liefert das Makro eine 2, und nicht 1. Das ist überhaupt nicht klar. Denn das ist ja die selbe Situation wie bei (1), alles leer. Und da kam eine Fehlermeldung.
Sit. (4): Nun schreibe ich was in die Zelle B5. Das Makro liefert: 2. Naja, so wie vorhin. Aber jetzt kommt die Krönung:
Sit. (5): Nun gehe ich in ein anderes Blatt, schreibe was in die Zelle B5. Das Makro liefert: 1. Warum geht das jetzt?
Hat Excel ein Unterbewusstsein, das wir nicht auslesen können? Denn (1) und (3) liefern unterscheidliche Ergebnisse, obwohl die Zellen gleich leer sind, aber eine unterschiedliche Vergangenheit vorliegt.
Auch (4) und (5) sind gleich von der Zellenbelegung, haben aber anderes Vorleben.
Gruss, Thomas

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Rätselhaftes Range.Find
16.07.2020 01:03:35
Daniel
Hi
1. Als Vermutung: Könnte daran liegen, dass eine Datei erst mit dem Einfügen des ersten Wertes wirklich angelegt wird und bis dahin nur eine "Leere Hülle" ist.
3. Beachte den Parameter "After". Dieser legt denn Startpunkt der Suche fest. Wenn du diesen Parameter nicht angibst, muss VBA einen Wert annehmen. In der Regel dürfte das die erste Zelle des zu durchsuchenden Zellbereichs sein. Wie der Name "After" vermuten lässt, beginnst die Suche nicht in dieser Zelle, sondern in der nächsten Zelle.
5. VBA arbeitet auch oft mit der UsedRange. Das ist der Zellbereich, der tatsächlich mit Inhalten gefüllt ist. Dieser Zellbereich muss nicht zwingend in A1 beginnen, er kann auch später beginnen, wenn die davorliegenden Zellen noch nie benutzt wurden. Vermutlich muss die Zelle für "After" Teil der Usedrange sein, damit kommt in deinem Fall nur B5 in frage.
Das ist jetzt aber auch die letzte Zeile des bekannten Bereichs, und die nächste Zelle nach der Letzen ist die erste....
Ok, hier wird das Prinzip der Usedrange etwas durchbrochen, weil B1 ja auch nicht zur UsedRange gehört, aber vermutlich werden hier Zellen die VOR der UsedRange liegen anders behandelt als die, die danach liegen.
Gruß. Daniel
Anzeige
AW: Rätselhaftes Range.Find
16.07.2020 20:29:40
Thomas
Hi Daniel,
Es könnte daran liegen, dass die Datei noch nicht richtig angelegt ist? Diesen Gedanken kann ein gewöhnlicher Anwender kaum folgen oder nachvollziehen.
Deine Vermutungen und Annahmen helfen mir nicht weiter. Sie mögen ihre Berechtigung haben, stehen aber mit der erwarteten Funktionsweise in keinem Zusammenhang. Ich kann mir daraus auch keine Anwendungsregeln ableiten und habe nichts darüber recherchieren können.
Ohne "after" ist die erste Zeile die letzte durchsuchte? Ist mir bisher noch nicht aufgefallen.
Danke, Daniel, war trotzdem interessant zu lesen.
Tom
Anzeige
AW: Rätselhaftes Range.Find
16.07.2020 20:56:04
Daniel
Hi
die Zelle, die du bei AFTER angibst, ist die letzte, die durchsucht wird.
gibst du den Parameter AFTER nicht an, dann ist das die erste Zelle des durchsuchten Bereichs.
AW: Rätselhaftes Range.Find
16.07.2020 21:55:42
Thomas
Hi Daniel,
das ist ja das Seltsame. In Situation 3 wird die zweite Fundstelle ausgegeben und nicht die erste, wie bei Fehlen einer Angabe von AFTER zu erwarten ist.
AW: Rätselhaftes Range.Find
16.07.2020 22:06:04
Daniel
wenn AFTER fehlt, wird die erste Zelle des zu durchsuchenden Zellbereichs als AFTER eingesetzt, weil irgendeine Zelle muss die Suche hier verwenden.
AW: Rätselhaftes Range.Find
17.07.2020 10:24:29
Thomas
OK, dann versuche ich, zu verstehen:
Bei Range.Find wird der nichtleere Bereich des Range durchsucht, beginnend mit der zweiten Zelle des nichtleeren Bereichs, und dann der Rest.
Gut, zu wissen.
Vielen Dank
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige