Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Suchen und Ersetzen in VBA - Meldungen verarbeiten

Betrifft: Suchen und Ersetzen in VBA - Meldungen verarbeiten von: Roland
Geschrieben am: 16.03.2016 09:18:33

Hallo an die Experten.

Folgendes Problem. Ich habe ein VBA-Makro, das die Suchen und Ersetzen-Funktion aus dem Dialog nutzt, um in parametrisierter Form Zellinhalte zu ersetzen.

Im Dialog erhalte ich dann so schöne Meldungen, dass z.B. der Suchtext nicht gefunden wurde oder dass es eben zu x Ersetzungen gekommen ist.

Diese Info würde ich gerne in einem Log-File meines Makros als Protokoll ausgeben. Habe aber bislang noch keinen Hinweis gefunden, wie ich auf diese Info im VBA-Code zugreifen kann.

Danke für entsprechende Hinweise im Voraus

Roland

  

Betrifft: AW: Suchen und Ersetzen in VBA - Meldungen verarbeiten von: Michael (migre)
Geschrieben am: 16.03.2016 09:43:44

Hallo!

Würde ich so machen:

Sub ReplaceLog()

    Dim i As Long
    Dim Bereich As Range
    Dim Zelle As Range
    Dim StrCache As String
    
    Set Bereich = ActiveSheet.UsedRange
    i = 0
    For Each Zelle In Bereich
        StrCache = Zelle.Text
        Zelle.Replace What:="a", Replacement:="b", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
        If StrCache <> Zelle.Text Then i = i + 1
    Next Zelle
    Select Case i
        Case Is > 0
            MsgBox i & " Ersetzungen vorgenommen."
        Case Else
            MsgBox "Suchbegriff nicht gefunden. Keine Ersetzungen vorgenommen."
    End Select
End Sub
LG
Michael


  

Betrifft: AW: Suchen und Ersetzen in VBA - Meldungen verarbeiten von: Roland
Geschrieben am: 16.03.2016 10:47:31

Danke für den Hinweis, Michael. Das funktioniert erst einmal so. Allerdings verliere ich so Performance :-(. Aber das lässt sich bestimmt noch optimieren.


  

Betrifft: AW: Suchen und Ersetzen in VBA - Meldungen verarbeiten von: Michael (migre)
Geschrieben am: 16.03.2016 11:08:05

Hallo!

Aber das lässt sich bestimmt noch optimieren.
Aber dazu lassen sich bestimmt noch mehr Informationen Deinerseits liefern (konkrete Verhältnisse in Deiner Mappe, wie groß ist der durchsuchte Bereich etc.).

Anderer Ansatz wäre folgender:

Sub ReplaceLog()

    Dim Bereich As Range
    Dim Zelle As Range
    Dim SuchStr As String
    Dim ErsatzStr As String
    Dim Zaehler As Long
    
    Set Bereich = ActiveSheet.UsedRange
    
    SuchStr = "op"
    ErsatzStr = "AA"
    
    Zaehler = WorksheetFunction.CountIfs(Bereich, "*" & SuchStr & "*")
    
    For Each Zelle In Bereich
        Zelle.Replace What:=SuchStr, Replacement:=ErsatzStr, LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Next Zelle

    MsgBox "Ersetzungen: " & Zaehler

End Sub
Lg
Michael


  

Betrifft: AW: Suchen und Ersetzen in VBA - Meldungen verarbeiten von: Roland
Geschrieben am: 16.03.2016 13:04:57

Die Story ist wie folgt: Ich ziehe mir via ODBC einen Datenbanktabelle mit ca. 100.000 Datensätzen nach Excel. In einem Feld dieser Tabelle sind Freitexte erfasst. In der Regel zwischen 500 und 1000 Zeichen groß. Auf diesen Freitextfeldern sollen Korrekturen im Suchen-und-Ersetzen-Verfahren angewendet werden. Dazu wird eine Liste der Ersetzungspärchen vorgegeben. Das werden voraussichtlich 50 sein / werden. Diese werden dann ausgeführt und sollen in der Gesamtheit protokolliert werden. Die Trefferquote wird zwischen 0 und 10.000 liegen. Anhand des Protokolls und einer Sichtprüfung wird die Änderung freigegeben und in Datenbank zurückgeschrieben.


  

Betrifft: AW: Suchen und Ersetzen in VBA - Meldungen verarbeiten von: Michael (migre)
Geschrieben am: 16.03.2016 13:22:12

Hallo!

Super Sache, aber wo benötigst Du jetzt Hilfe? Was ist Deine Frage?
Geht's um meine letzte Code-Variante oder...

LG
Michael


  

Betrifft: AW: Suchen und Ersetzen in VBA - Meldungen verarbeiten von: Roland
Geschrieben am: 16.03.2016 13:35:27

Alles gut inzwischen :-). Mit der CountIf-Methode bekomme ich meine Anzahl. Die Replace-Methode wende ich auf die gesamte Spalte an und gehe nicht über jede einzelne Zelle.
Das ist aktuell performant genug.
Danke für Interesse und Hilfe.
LG
Roland


  

Betrifft: Gerne, Danke für die Rückmeldung, owT von: Michael (migre)
Geschrieben am: 16.03.2016 13:48:42




 

Beiträge aus den Excel-Beispielen zum Thema "Suchen und Ersetzen in VBA - Meldungen verarbeiten"