Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
872to876
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
872to876
872to876
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Suchen und ersetzen
27.05.2007 11:58:00
Chris
Servus,
habe mir folgendes Makro zusammengestellt:

Sub suche1()
Dim t As Worksheet, z As Range, SuchW As String, ersatz As String, erste As String
SuchW = InputBox("Suche")
ersatz = InputBox("Ersatz")
If SuchW = "" Then Exit Sub
For Each t In ActiveWorkbook.Worksheets
t.Activate
Set z = t.Cells.Find(SuchW)
If Not z Is Nothing Then
erste = z.Address
Do
z.Activate
z.Select
Selection.Replace What:=SuchW, Replacement:=ersatz, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Set z = Cells.FindNext(after:=ActiveCell)
Loop Until erste = z.Address
End If
Next t
End Sub


damit wollte ich suchen und ersetzen in allen Arbeitsblättern einer Arbeitsmappe. Für Blatt 1 funktioniert das auch einwandfrei, aber nach Beendigung des Ersetzens in Tabelle1, bekomme ich eine Fehlermeldung:
Objekt-oder With-Block-Variable nicht festgelegt.
Wo liegt mein Fehler? Wenn ich das ohne Ersetzen ausprobiere läuft das Makro einwandfrei durch. ich komme nicht drauf, warum Excel abbricht.
Vielen Dank für eure Hilfe
Gruß
Chris

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suchen und ersetzen
27.05.2007 13:57:28
Daniel
Hallo
mal ne Frage, brauchst du dafür überhaupt ein Makro?
Wenn du jeden Wert innerhalb der Arbeitsmappe ersetzen willst, kannst du auch einfach die Excel-Funktion BEARBEITEN - ERSETZEN nehmen und dann bei OPTIONEN beim ersten SUCHEN einfach ARBEITSMAPPE auswählen.
auch sonst ist das ganze überflüssig, da REPLACE bereits das Suchen beinhaltet.
Außderdem werden automatisch alle gefunden Suchbegriffe innerhalb des angegeben Zellbereichs ersetzt.
Wenn nur eine Zelle als Suchbereich angegeben wird, wird der Suchbereich auf das ganze Blatt erweitert.
das könnte auch die Grund für den Fehler in der (überflüssigen) DO-Schleife sein.
Dein Makro sollte auch in dieser Form seinen Zweck erfüllen:

Sub suche1()
Dim t As Worksheet, z As Range, SuchW As String, ersatz As String, erste As String
SuchW = InputBox("Suche")
ersatz = InputBox("Ersatz")
If SuchW = "" Then Exit Sub
For Each t In ActiveWorkbook.Worksheets
t.Cells.Replace What:=SuchW, Replacement:=ersatz, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Next t
End Sub


des weiteren Empfehle ich dir, beim Programmieren mit Einrückungen (TAB) zu arbeiten.
Dabei wird der Code einer Schleife oder eines IF-Blocks nach rechts eingerückt.
Macht die Sache einfach übersichtlicher.
Gruß, Daniel

Anzeige
AW: Suchen und ersetzen
27.05.2007 15:20:37
Chris
Servus Daniel,
im Prinzip hast du recht. Dein Code ist natürlich einfacher und ersetzt alles. Ich bin mir aber noch nicht sicher, ob ich nicht nur einzelne Zellen ändern will und noch eine weitere Abfrage starte, z.B.:
i = MsgBox("Auf diesem Blatt weitersuchen?", vbYesNo + vbQuestion)
If i = vbNo Then Exit Do
deswegen auch Einzelzellen-Abfrage.
Prinzipiell könnte man das auch über bearbeiten-suchen und ersetzen machen. Ich möchte denn Code allerdings aus einer Abfrageroutine herausstarten; also wenn A1 = xy, dann...
Deswegen brauche ich auch den Code.
Gruß
Chris

Anzeige
AW: Suchen und ersetzen
27.05.2007 14:04:59
KViertel
Hallo Chris,
der Fehler liegt daran, dass in der Loop Until Prüfung z bei nicht mehr vorhandenem Suchobjekt nothing ist.
Loop Until z Is Nothing fängt den Fehler ab. Außerdem haben Seach und Replace-Format bei mir Fehler gemeldet (nicht definiert).
Dim t As Worksheet, z As Range, SuchW As String, ersatz As String, erste As String
SuchW = InputBox("Suche")
ersatz = InputBox("Ersatz")
If SuchW = "" Then Exit Sub
For Each t In ActiveWorkbook.Worksheets
t.Activate
Set z = t.Cells.Find(SuchW)
If Not z Is Nothing Then
erste = z.Address
Do
z.Activate
z.Select
z.Replace What:=SuchW, Replacement:=ersatz, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Set z = Cells.FindNext(after:=ActiveCell)
Loop Until z Is Nothing
End If
Next t
End Sub
MfG. Klaus

Anzeige
AW: Suchen und ersetzen
27.05.2007 15:14:31
Chris
Danke Klaus,
jetzt funktioniert's. Kann jetzt weiterbasteln.
Gruß
Chris

313 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige