Excel-Kommentare per VBA-Makro ändern

PMH1

Cadet 3rd Year
Registriert
Dez. 2012
Beiträge
37
Ich habe eine Excel-Tabelle mit mehr als 50 Tabellenblättern (Gesamtgröße 120 MB + etwas mehr).
Verteilt über alle Tabellenblätter habe ich mehr als 2.000 Kommentare. Diese möchte ich auf einmal ändern.

Das Markro sollte Tabellenblatt für Tabellenblatt durchlesen/-suchen und in den Kommentaren nach einem bestimmten Text bzw. einer bestimmten "Buchstaben-/Zahlenkombination" suchen. Bei einem Treffer sollte "alt" durch "neu" ersetzt werden.

Ideal wäre, wenn über ein "Fenster" die alte und die neue "Buchstaben-/Zahlenkombination" eingeben könnte; es reicht aber auch, wenn ich direkt im Makro die Änderung vornehmen kann.

Evtl. auch noch eine Zählerführung der geänderten Kommentare wäre ideal muß aber nicht sein.

Kann mir da "draußen" jemand helfen ???:pcangry:

Vielen, vielen Dank schon mal im Vorraus.
Gruß PMH
 
Gibt es auch eine kurze knackige Lösung ?
 
Leider nein. Kannst ja mal versuchen ob die ersetzen Funktion dir die Möglichkeit bietet Kommentare zuveditieren. Strg+h
 
"STRG + H" geht doch nur bei suchen + nicht bei ersetzen
 
Das ließe sich schon programmieren, bisschen Schleifenkonstruktion… Eher lästige wäre das Eingeben von ›Von‹ und ›Durch‹. Und auch das Herumfriemeln im Kommentarinhalt ist nicht gerade angenehm.

Mal sehen…
Code:
Sub InKommentarenErsetzen()
Dim Blatt As Worksheet
Dim Bereich As Range
Dim Zelle As Range
Dim Inhalt As String
Const Von As String = "e" 'kein
Const Durch As String = "§§" 'Kommentar :-D
Dim P1 As Integer
 For Each Blatt In Worksheets
  Debug.Print Blatt.Index & " " & Blatt.Name 'nur um im Dierktbereich zu verfolgen was sich tut
  Set Bereich = Blatt.UsedRange
  For Each Zelle In Bereich
   If Not Zelle.Comment Is Nothing Then
    Inhalt = Zelle.Comment.Text
    P1 = InStr(Inhalt, Von)
    If P1 > 0 Then
     While P1 > 0
      Inhalt = Left(Inhalt, P1 - 1) & Durch & Mid(Inhalt, P1 + Len(Von))
      P1 = InStr(P1 + Len(Durch) - 1, Inhalt, Von)
     Wend
     Zelle.ClearComments
     Zelle.AddComment
     Zelle.Comment.Visible = False 'besser ist das
     Zelle.Comment.Text Text:=Inhalt
    End If
   End If
  Next
 Next
End Sub
Das ist eine recht rohe Version; Experten würden es krachen lassen die Zeichenformatierung (Fett, Kursiv) oder die des Kommentars (der kann z.B. Rahmen haben und Hintergrundfarben - klick mal präzise auf den Rand eines Kommentars, und dann Kommentar formatieren…) jeweils auslesen, speichern und zurückschreiben. Aber das spare ich hier mal ein.
Was bei Von und Durch passieren muss erklärt sich von selbst ;)

CN8
 
Vielen, vielen Dank cumulonimbus8, Du bist ja ein echter Spezi;),

super, super Klasse ==> es funktioniert

Ich habe alle Texte entsprechend ändern können.

Eine "Kleinigkeit" noch. Die Schrift, die Schriftfarbe und die Schriftgröße wurde im ganzen Kommentar auf Standard gesetzt. Damit kann man leben, aber gibt es hier noch eine Möglichkeit ==> ok "eierlegende Wollmichsau"; schön wär's ja.

Viele Grüße
PMH
 
Ich erwähnte ja - auch das ginge. Aber das wäre ein arger Aufwand den ich hier nicht so einfach hinschreiben kann.

Zeichne mal ein Makro auf und manipuliere dann mal wie angegeben einen Kommentar. Wenn du den Code anschaust siehst du einen Umriss was alles zwischengespeichert werden muss & könnte, allein für den »Rahmen«. Beim Text müsste man je Zeichen jede Formatierungsart und -weise zwischenspeichern und diese Liste noch anpassen damit entsprechend die Ersatzstücke entsprechend formatiert werden, allein dazu müsste mir eine Strategie einfallen…
Ich habe damit gebastelt, für den Hausgebrauch. Und das hat mich davon geheilt so was freiwillig zu tun :D

CN8
 
Hallo CN8,
nochmal Danke für die Antwort. Jetzt bin ich auch "geheilt" und verzichte auf den "Schmuck am Nachthemd". Ich hab' da schon mal hin- und herprobiert, aber erstmal aufgegeben.

Schönen verbleibenden Sonntag und noch viele Sonne
Gruß PMH
 
Zurück
Oben