Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA: Suchen - Weitersuchen

VBA: Suchen - Weitersuchen
03.03.2017 08:34:40
Daniel
Hallo Excelprofis,
Ich habe ein Suchen - Weitersuchen Makro konstruiert, welches mir in einer Schlaufe Resultatblöcke findet und dort in einem bestimmten Bereich des Blockes Zahlen einträgt. Ändere ich dieses Makro nun so, dass im Block Zeilen eingefügt werden, um mehr Zahlen einzutragen, als der Resultatblock freie Zeilen enthält, so funktioniert das Weitersuchen nicht mehr. Ich nehme an, dass ich durch das Einfügen der Zellen die Objektreferenz verändere.
Kann mir bitte jemand einen Tipp geben, wie ich dieses Problem löse.
Vielen Dank!
Daniel D.
Anzeige

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

Betreff
Datum
Anwender
Anzeige
Wo ist der Code oder die Beispielmappe? (owT)
03.03.2017 08:52:26
EtoPHG

AW: Wo ist der Code oder die Beispielmappe? (owT)
03.03.2017 09:24:05
Daniel
Hallo,
Leider kann ich den Code nicht so posten, aber vielleicht geht es per Upload: https://www.herber.de/bbs/user/111924.xlsm
Danke!
Daniel D.
AW: Wo ist der Code oder die Beispielmappe? (owT)
03.03.2017 10:24:24
EtoPHG
Hallo Daniel,
Ich hab deine Beispielmappe angeschaut. Ich kann mir aus der Datendarstellung absolut keinen Reim machen, was die angestrebte Funktionalität der Arbeitsmappe ist. Kannst du erläutern, was
Eingabe Daten - Verarbeitung - Erwartete Ausgabe (Resultat)
sind oder sein sollen?
Gruess Hansueli
Anzeige
AW: Wo ist der Code oder die Beispielmappe? (owT)
03.03.2017 11:29:56
Daniel
Hallo Hansueli,
Das Ganze ergibt ein Protokollformular, welches soweit möglich in Excel vorbereitet wird. Oben an den Blöcken stehen Anweisungen für die Mitarbeiter, unten werden die Probennummern eingetragen. Die Anzahl der Blöcke sowie die Zahl der Nummern sind variabel.
In der Spalte P trage ich die Nummern ein, welche dann in allen vorhandenen Blöcken unterhalb der Bezeichnung "Proben-Nr" durch das Makro eingetragen werden sollen. Das Ende des Datenbereichs des Blockes ist durch den Eintrag "Visum" in Spalte M definiert. Diese beiden Einträge sind das einzige konstante in den Blöcken. Exemplarisch sind 2 Blöcke in der Beispieltabelle, welche hier in Zeile 46 und 62 beginnen.
Das umgebaute Makro prüft blockweise, ob im Datenbereich eines jeden Blocks genügend Zeilen vorhanden sind, um alle Probennummern einzutragen und fügt diese bei Bedarf ein.
Dies klappt beim ersten Block, führt aber im weiteren Verlauf des Makros zum Finden des nächsten Blockes zu einer Fehlermeldung.
Ich hoffe, diese Erklärungen sind nützlich...
Danke und Gruss
Daniel D.
Anzeige
Da hat man keinen durchblick
03.03.2017 11:49:45
Max2
Hallo,
Dein Code bricht sich ständig selbst ab durch die etlichen "Exit Sub" im Code.
Bei deinem .FindNext brauchst du auch eine Abbruchbedingung.
With Worksheets(1).Range("a1:a500")
Set c = .Find(2, lookin:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = 5
Set c = .FindNext(c)
            If c is Nothing Then
GoTo DoneFinding
End If
Loop While Not c Is Nothing And c.Address  firstAddress
End If
DoneFinding:
End With
Fett markiert im Code von MSDN.
Schreibst du die rein geht es aber dann killt ein Exit Sub eben das ganze wieder.
Ich würde die Suche und das einfügen etc. trennen.
Ein Sub sucht danach
Ein Sub überträgt
Ein Sub macht was auch immer
Dadurch wird es übersichtlicher und du kannst es wesentlich einfacher anpassen bzw. verändern
Anzeige
AW: Da hat man keinen durchblick
03.03.2017 12:31:41
Daniel
Hallo,
Danke für die Durchsicht des Codes und Deinen Tipp. Ich werde wohl Makro so anpassen müssen. Ich verstehe aber die Ursache des Problems noch nicht: sobald ich in den Block per Code Zeilen einfüge, funktioniert das Weitersuchen nicht mehr.
Gruss
Daniel D.
;
Anzeige
Anzeige

Infobox / Tutorial

VBA: Suchen und Weitersuchen in Excel effizient gestalten


Schritt-für-Schritt-Anleitung

  1. Makro vorbereiten: Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten. Erstelle ein neues Modul.

  2. Code eingeben: Füge den folgenden Code ein, um die Suche nach bestimmten Werten zu implementieren:

    Sub SuchenUndWeitersuchen()
       Dim c As Range
       Dim firstAddress As String
    
       With Worksheets(1).Range("A1:A500")
           Set c = .Find(2, LookIn:=xlValues)
           If Not c Is Nothing Then
               firstAddress = c.Address
               Do
                   c.Value = 5
                   Set c = .FindNext(c)
                   If c Is Nothing Then Exit Do
               Loop While Not c Is Nothing And c.Address <> firstAddress
           End If
       End With
    End Sub
  3. Code anpassen: Achte darauf, dass Du die Abbruchbedingungen in der Schleife richtig setzt. Dies verhindert, dass der Code in eine Endlosschleife gerät.

  4. Zeilen einfügen: Wenn Du Zeilen in Deinem Block einfügen möchtest, nutze Rows(n).Insert, wobei n die Zeilennummer ist, an der Du die Zeile einfügen möchtest.

  5. Weitersuchen aktivieren: Stelle sicher, dass nach dem Einfügen von Zeilen die Objektreferenz nicht verloren geht. Überprüfe, dass die Suchparameter nach dem Einfügen neu gesetzt werden.


Häufige Fehler und Lösungen

  • Problem: Das Weitersuchen funktioniert nicht mehr, wenn Zeilen eingefügt werden.

    • Lösung: Überprüfe nach dem Einfügen, ob die Referenzen auf den letzten Suchwert korrekt sind. Möglicherweise musst Du die .Find-Methode erneut aufrufen.
  • Problem: Der Code bricht mit einer Fehlermeldung ab.

    • Lösung: Achte darauf, dass keine unnötigen Exit Sub-Befehle im Code sind, die die Ausführung unterbrechen.

Alternative Methoden

  • Verwendung von Array: Anstatt direkt in die Zellen zu schreiben, kannst Du die Werte in ein Array laden und die Werte anschließend in einem Rutsch in das Arbeitsblatt schreiben. Dies kann die Performance verbessern.

  • Filterfunktion: Nutze die Filterfunktion, um gezielt nur die relevanten Zeilen anzuzeigen, die Du bearbeiten möchtest.


Praktische Beispiele

  • Beispiel 1: Angenommen, Du hast in Spalte A eine Liste von Zahlen und möchtest alle Vorkommen der Zahl 2 durch 5 ersetzen und dabei sicherstellen, dass das Weitersuchen funktioniert, selbst wenn Du Zeilen einfügst.

  • Beispiel 2: Du verwendest ein Protokollformular, das dynamisch angepasst werden muss. Stelle sicher, dass Du die Endadresse nach dem Einfügen von Zeilen im Code aktualisierst.


Tipps für Profis

  • Modularer Code: Teile Deinen Code in mehrere Subroutinen auf, sodass jede Subroutine eine spezifische Aufgabe hat. Dies erhöht die Lesbarkeit und Wartbarkeit des Codes.

  • Debugging: Nutze die Debugging-Tools im VBA-Editor, um Fehler zu finden. Setze Haltepunkte, um den Fluss des Codes zu überprüfen.

  • Dokumentation: Kommentiere Deinen Code ausführlich, damit Du später nachvollziehen kannst, was jeder Teil des Codes bewirken soll.


FAQ: Häufige Fragen

1. Warum funktioniert das Weitersuchen nicht nach dem Einfügen von Zeilen? Das Weitersuchen könnte fehlschlagen, weil die Objektreferenzen nach dem Einfügen verändert wurden. Stelle sicher, dass Du die Suchparameter nach dem Einfügen aktualisierst.

2. Wie kann ich die Leistung meines Makros verbessern? Verwende Arrays, um Daten zu laden und in einem Schritt in das Arbeitsblatt zu schreiben. Das reduziert die Anzahl der Interaktionen mit dem Arbeitsblatt und beschleunigt den Prozess erheblich.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige