Function entrytest(bereich As Range, suchText As String)
Dim foundCell As Range
Dim text As String
Set foundCell = bereich.Find(what:=suchText, LookIn:=xlValues)
firstAddress = foundCell.Address
Do
text = text + foundCell.Address
Set foundCell = bereich.FindNext(foundCell)
Loop While Not foundCell Is Nothing and foundcell.address firstAddress
End
Das Problem: Die FindNext-Methode liefert mir immer Nothing zurück, obwohl der Suchstring mehrmals vorkommt. Find arbeitet aber korrekt.
Also bei mir funktioniert es problemlos. Vielleicht solltest Du mal ohne Makro probieren, ob es funktioniert, sprich, die Suche einfach ganz normal über dan Suchen-Dialog durchführen und dann auf „Weitersuchen“ klicken. Wenn das auch zu nichts führt, liegt es nicht am Code, sondern daran, dass Du nur denkst, dass der Begriff mehrfach vorkommt, was aber in Wirklichkeit nicht der Fall ist.
Ich persönlich glaube ja, dass Dein „bereich“ falsch ist. Ergänze mal „bereich.select“ irgendwo im Code, dann siehst Du, ob der wirklich stimmt, also alle gewünschten Zellen enthält. Ich vermute wie gesagt, dass das nicht der Fall ist. Und sollte das so sein, kann ich nur wieder sagen: Nicht immer im Blindflug programmieren, sondern gucken, was man tut!
Bist Du übrigens sicher, dass Du die Adressen einfach nur aneinander kleben willst? Ich denke, dass da noch irgendein Trennzeichen zwischen fehlt, oder? Sonst kann man damit doch wenig anfangen.
Achso, und der Artikel wäre im Excel-Brett (Tabellenkalkulation) fast noch besser aufgehoben gewesen, weil es offenbar VBA betrifft und nicht VB. Aber das ist egal, hier geht genauso
Das Problem: Die FindNext-Methode liefert mir immer Nothing
zurück, obwohl der Suchstring mehrmals vorkommt. Find arbeitet
aber korrekt.
Hi pman,
wie hast du überprüft daß Find korrekt arbeitet?
Da Kristian sagt daß dein Code funktioniert gibts da einige Hauptverdächtige an denen es liegen könnte daß du kein Ergebnis erhälst.
Den Hauptverdächtigen siehst du im piegel *grins*
Weiterhin wäre wie gesagt zu prüfen ob du im richtigen Bereich suchst.
Weiterhin machen Daten (also Mehrzahl von datum) oft Schwierigkeiten.
Weiterhin Groß/Kleinschreibung. Problematisch sind auch Leerzeichen am Ende eines Zelleneintrages.
F8 im Vba-Editor kennst du!?
Gruß
Reinhard
Die Variable text dient nur zu Testzwecken und soll nicht weiter stören.
Tatsache ist, dass in G7 und G8 ‚100‘ drin steht und er immer nur den Eintrag in G7 findet, sprich FindNext ‚nothing‘ liefert.
Habe den Verdacht, dass es sich um einen Bug von Excel handelt. Könnt ihr mal vielleicht den Code ebenfalls so eingeben und in die beiden Zellen ‚100‘ schreiben.
Achsoooo, Du hast versucht, eine TABELLEN-Funktion zu schreiben, die Du also in einer Tabellenzelle verwendest und von da aus aufrufst. Das hättest Du gleich sagen sollen. Ich habe das nämlich immer nur mit einer reinen VBA-Funktion getestet, und das ist ein Unterschied.
Warum das nicht klappt, kann ich Dir auch nicht sagen. Fakt ist jedoch, dass sich Tabellenfunktionen anders verhalten, weil sie Einschränkungen unterliegen. So kann man z.B. nicht schreibend auf irgendwelche Zellen oder Objekte in der Tabelle zugreifen. Wenn man das versucht, kommt immer #WERT raus.
Das „FindNext“ scheint auch so ein Fall zu sein, aber wie gesagt - keine Ahnung, warum. In erster Näherung würde ich behaupten, dass man in Tabellenfunktionen lediglich einfache Berechnungen vornehmen kann, weiter nichts. Dass das „Find“ noch funktioniert, wäre dann schon eine Ausnahme.
Du müsstest mal probieren, statt mit „FindNext“ mehrfach mit „Find“ zu arbeiten. Da Du offenbar nur eine Spalte durchsuchen willst, ist das recht einfach, indem Du den Suchbereich nach und nach oben abschneidest. Vielleicht klappt das ja.
Ansonsten musst Du Dir überlegen, ob für das, was Du vorhast, eine Tabellenfunktion überhaupt sinnvoll ist und diese Variante ggf. streichen.
Was ist denn der Unterschied zwischen Tabellen-Fkt. und VBA-Fkt.?
Na das habe ich doch gerade beschrieben.
Eine Tabellenfunktion wird als Formel von einer Zelle aus aufgerufen, wohingegen eine reine VBA-Funktion, wie ich sie genannt habe, nur innerhalb von VBA aufgerufen und genutzt wird.
Also wer sich für eine Lösung interessiert: Habe es ohne Find
bzw. FindNext gelöst
For Each c In bereich
If Not c.Find(„100“, LookIn:=xlValues) Is Nothing Then
End If
Next
Ehm … na das ist ja nun mit Verlaub auch ein bissl
blödsinnig Dann kannst Du auch gleich folgendes
schreiben:
For Each c In bereich
If c.Value 100 Then do something
Next c
Irgendwie habe ich das Gefühl das Nichtfinden liegt am Unterschied zwischen
„100“
und
100
Das „c“ fehlte übrigens hinter dem „Next“.
Naja, Vba braucht das c nicht und einige Leute lassen es gerne weg, aber ich schreibe es nahezu immer hin denn es macht mir den Code leichter lesbar da ich eindeutig weiß auf wen genau sich das Next bezieht, besondern wenn da viele If’s und For vermengt sind.
Irgendwie habe ich das Gefühl das Nichtfinden liegt am
Unterschied zwischen „100“ und 100
Das Gefühl habe ich eigentlich nicht. Dachte ich auch als erstes dran, aber spätestens im Beispielfile wurde klar, dass das keine Rolle spielt. Ich gehe davon aus, dass es der besagte Unterschied zwischen Tabellenfunktion und reiner VBA-Funktion ist.
Das „c“ fehlte übrigens hinter dem „Next“.
Naja, Vba braucht das c nicht
Ich dachte mich erinnern zu können, dass der Interpreter immer meckert, wenn man´s nicht schreibt. Im Gegensatz zu VBS, wo man es nicht schreiben DARF.
Ich dachte mich erinnern zu können, dass der Interpreter immer
meckert, wenn man´s nicht schreibt. Im Gegensatz zu VBS, wo
man es nicht schreiben DARF.
Hallo Kristian,
ich bin sicher man kann es in Vba weglassen. Aber lassen wir das, ist ja ruckzuck ausprobiert.
Danke für die Information zu VBS. Das kenne ich zwar nicht aber das kann sich ja mal ändern und es würde mich sicher Stunden kosten herauszufinden warum da der Debugger, sofern es einen gibt, laufend das c moniert. Darauf dass nur „Next“ ohne Variable erlaubt ist, darauf käme ich irgendwie erstmal überhaupt nicht:frowning:
Gruß
Reinhard