Home-›Foren-›Outlook-›Outlook VBA-›Outlook Kontakt Notizfeld Format
Verschlagwortet: Outlook Format VBA
- This topic has 23 Antworten, 2 Stimmen, and was last updated 13:48 um 24. Januar 2023 by Khun Bunsong.
- AutorBeitrag
- 23. Januar 2023 um 16:51 #1029416MailhilfeKeymaster
Der Grund dafür ist, dass das Replace-Argument in der Execute-Methode das gesamte Dokument durchsucht und alle Leerzeichen durch Tabs ersetzt, anstatt nur diejenigen, die direkt aufeinanderfolgen.
Eine Möglichkeit, dieses Problem zu lösen, besteht darin, eine Schleife zu verwenden, um den Text Zeile für Zeile zu durchlaufen und die Leerzeichen zu ersetzen. Hier ist ein Beispiel:
Sub Schrift_Kontakte_Notizen() Dim Ctk As ContactItem, InSp As Inspector, Doc As Object Set Ctk = ActiveExplorer.Selection(1) Debug.Print Ctk.Body Set InSp = Ctk.GetInspector Set Doc = InSp.WordEditor InSp.Display Doc.Content.Font.Name = "Calibri" Doc.Content.Font.Size = 14 Dim strText as String strText = Doc.Content.Text Dim arrLines as Variant arrLines = Split(strText, vbCrLf) For i = 0 To UBound(arrLines) arrLines(i) = Replace(arrLines(i), " ", "^t") Next i strText = Join(arrLines, vbCrLf) Doc.Content.Text = strText End Sub
In diesem Code wird der gesamte Text im Dokument in die Variable strText gespeichert, dann wird er in ein Array aufgeteilt, indem er an jedem Zeilenumbruch getrennt wird. Dann wird jede Zeile durchlaufen und alle aufeinanderfolgenden Leerzeichen durch Tabs ersetzt.
Es gibt auch eine andere Möglichkeit die RegEx (Regular Expression) verwenden, um die Leerzeichen zu finden und zu ersetzen, aber es ist etwas komplexer als die Verwendung einer Schleife. Mit der RegEx-Methode können Sie spezifischere Muster suchen und ersetzen, z.B. mehrere aufeinanderfolgende Leerzeichen. Hier ist ein Beispiel, wie es in Ihrem Code verwendet werden kann:
Sub Schrift_Kontakte_Notizen() Dim Ctk As ContactItem, InSp As Inspector, Doc As Object Set Ctk = ActiveExplorer.Selection(1) Debug.Print Ctk.Body Set InSp = Ctk.GetInspector Set Doc = InSp.WordEditor InSp.Display Doc.Content.Font.Name = "Calibri" Doc.Content.Font.Size = 14 Dim strText as String strText = Doc.Content.Text Dim objRegEx as Object Set objRegEx = CreateObject("VBScript.RegExp") objRegEx.Pattern = "\s{2,}" objRegEx.Global = True objRegEx.Replace(strText, "^t") Doc.Content.Text = strText End Sub
In diesem Code wird ein RegEx-Objekt erstellt und die Eigenschaft “Pattern” wird auf ein Muster gesetzt, das mehrere aufeinanderfolgende Leerzeichen sucht. Dann wird die Eigenschaft “Global” auf “True” gesetzt, damit die Methode Replace alle Übereinstimmungen im Text ersetzt. Schließlich wird die Methode Replace aufgerufen, um alle aufeinanderfolgenden Leerzeichen durch Tabs zu ersetzen und der bearbeitete Text wird wieder in das Dokument geschrieben.Es ist wichtig zu beachten, dass die RegEx-Methode etwas komplexer ist und mehr Zeit zum Verstehen und Implementieren benötigen kann. Es hängt davon ab, welche Methode für Sie am besten geeignet ist.
23. Januar 2023 um 17:07 #1029417Khun BunsongParticipantAlles so weit verstanden, zum Ergebnis:
1. Code bleibt das Ergebnis:
17.08.2017^t^t^t^t^t^tPE^t^t^t^t^t^tH.^t^t^t^t^t^tRichter^tT^t^t^t^t^t^t^tmit^t^t^t^t^tPE^t^t^t^t^t^tH.^t^t^t^t^t^tRichter,^t^t^t^t^t^t^t^tgibt^t^t^t^tInfos^t^t^tan^t^t^t^t^t^tGF^t^t^t^t^t^tH.^t^t^t^t^t^tKöhler^t^tdann^t^t^t^tweiter
^t^t^t^t^t^t^t^tT^t^t^t^t^t^t^t22.08.2017^t^t^t^t^t^t|^t^t^t^t^t^t^t11:00
2. Code braucht noch in einer Zeile Korrektur,, folgende Zeile stoppt im DEBUG Modus:
objRegEx.Replace (strText = “^t”)Ich bin total begeistert von Ihren VBA Kenntnissen, toll auch Ihre Hilfsbereitschaft, Danke
23. Januar 2023 um 17:16 #1029418MailhilfeKeymasterFür den ersten Code, könnten Sie versuchen, die Schleife, die Sie verwenden, um die Zeilen zu durchlaufen, so anzupassen, dass sie nur die Leerzeichen ersetzt, die direkt aufeinanderfolgen. Sie könnten zum Beispiel eine Schleife verwenden, um jede Zeile zu durchlaufen und dann eine weitere Schleife verwenden, um jedes Zeichen in der aktuellen Zeile zu durchlaufen. Wenn ein Leerzeichen gefunden wird, können Sie überprüfen, ob das nächste Zeichen ebenfalls ein Leerzeichen ist. Wenn dies der Fall ist, ersetzen Sie das Leerzeichen durch einen Tabulator.
Für den zweiten Code, gibt es einen kleinen Fehler in der letzten Zeile, es sollte sein:
objRegEx.Replace(strText, "^t")
Statt:
objRegEx.Replace (strText = "^t")
Bitte beachten auch die Hochkommas…
Ich hoffe, dass diese Anpassungen Ihnen helfen, das gewünschte Ergebnis zu erzielen.
23. Januar 2023 um 17:17 #1029419Khun BunsongParticipantHätte nicht gedacht, dass es so schwierig ist es in Outlook umzusetzen, in Word einfach mit dem Makro Recorder, aber leider nicht übertragbar auf Outlook Notizfeld in Kontakten.
Wenn es nicht geht, mach ich das weiter manuell:
STRG H
Dann wie im Bild und
Alle ErsetzenWürde halt Sinn machen in Outlook gleichzeitig die Schriftart und -Größe wieder zu vereinheitlichen und beides im Makro zu tun
Anhänge:
Sie müssen eingeloggt sein, um angehängte Dateien ansehen zu können.23. Januar 2023 um 22:52 #1029421Khun BunsongParticipantEs geht nicht weiter…
Anhänge:
Sie müssen eingeloggt sein, um angehängte Dateien ansehen zu können.24. Januar 2023 um 07:41 #1029423MailhilfeKeymasterEs scheint, dass das Problem darin besteht, dass die Replace-Methode des RegEx-Objekts keinen Rückgabewert hat. Sie müssen den Text, der durch die Replace-Methode bearbeitet wird, in einer separaten Variablen speichern, bevor Sie ihn in das Dokument schreiben. Hier ist ein Beispiel, wie Sie dies tun können:
Sub Schrift_Kontakte_Notizen() Dim Ctk As ContactItem, InSp As Inspector, Doc As Object Set Ctk = ActiveExplorer.Selection(1) Debug.Print Ctk.Body Set InSp = Ctk.GetInspector Set Doc = InSp.WordEditor InSp.Display Doc.Content.Font.Name = "Calibri" Doc.Content.Font.Size = 14 Dim strText as String strText = Doc.Content.Text Dim objRegEx as Object Set objRegEx = CreateObject("VBScript.RegExp") objRegEx.Pattern = "\s{2,}" objRegEx.Global = True Dim strModifiedText as String strModifiedText = objRegEx.Replace(strText, "^t") Doc.Content.Text = strModifiedText End Sub
In diesem Beispiel wird die Replace-Methode aufgerufen, um den Text zu bearbeiten und das Ergebnis wird in einer separaten Variablen namens strModifiedText gespeichert. Dann wird der Inhalt des Dokuments mit diesem bearbeiteten Text ersetzt.
24. Januar 2023 um 10:38 #1029424Khun BunsongParticipantGuten Morgen,
wird immer besser, Makro läuft durch, leider passt das Ergebnis noch nicht.
Statt einen Tab zu setzen, setzt das Makro an jede Stelle “^t”Beispiel:
18.07.2018^t2.BIS^tH.^tMüller^tPE^tMeeting 9:00-11:00
Die Funktion aus dem Shortcut “^t” funktioniert als Tab also nicht im VBAHabern Sie noch eine Idee?
Vielen Dank24. Januar 2023 um 13:05 #1029425MailhilfeKeymasterEs tut mir leid, dass ich Ihnen nicht früher sagen konnte, dass der Platzhalter “^t” in VBA nicht als Tabulator funktioniert.
Eine Möglichkeit, das Problem zu lösen, besteht darin, den Tabulator explizit als ASCII-Code 9 zu definieren und ihn als ReplaceWith-Wert zu verwenden. Hier ist ein Beispiel, wie Sie dies tun können:
Sub Schrift_Kontakte_Notizen() Dim Ctk As ContactItem, InSp As Inspector, Doc As Object Set Ctk = ActiveExplorer.Selection(1) Debug.Print Ctk.Body Set InSp = Ctk.GetInspector Set Doc = InSp.WordEditor InSp.Display Doc.Content.Font.Name = "Calibri" Doc.Content.Font.Size = 14 Dim strText as String strText = Doc.Content.Text Dim objRegEx as Object Set objRegEx = CreateObject("VBScript.RegExp") objRegEx.Pattern = "\s{2,}" objRegEx.Global = True Dim strModifiedText as String strModifiedText = objRegEx.Replace(strText, Chr(9)) Doc.Content.Text = strModifiedText End Sub
In diesem Beispiel wird die Replace-Methode verwendet um alle aufeinanderfolgenden Leerzeichen mit dem ASCII-Code 9 (Tabulator) zu ersetzen, der von der Funktion Chr(9) generiert wurde.
24. Januar 2023 um 13:48 #1029426Khun BunsongParticipantBesten Dank, zuerst,: ES FUNKTIONIERT
Hatte selbst schon mit vbTab und anderen Befehlen experimentiert, aber da weiß ich viel zu wenig von VBA. Also ich vermute mal, dass sie ein Herr und nicht blond sind, wären sie eine junge Dame und blond, würde ich sie gerne auf meine angefangene Cola im Kühlschrank einladen…
Aber leider sind das ja immer alles Männers, die so gut drauf sind, wusste schon der amerikanische Philosoph AL BUNDY
Also vielmals bedankt für die tolle Arbeit, hoffe, das hilft auch dem einen oder anderen in Outlook zur Formatierung
Es ist mir ein Rätsel (PCs und Notebooks genutzt mit gleichen Office Account) warum das Notizfeld die Formatierungen oft, nicht immer, jedenfalls nicht nachvollziehbar verliert.
Habe eine voreingestellte Schriftart und Größe definiert, nutze da auch kleinere Tabellen im Notiz Body der Kontakte, nur ist das dann irgendwann alles wieder weg, Tabs durch viele Leerzeichen ersetzt, Schriftgrößen und Schriftart TEILWEISE anders
Nicht nachvollziehbar in Outlook 2021Vielen Dank und beste Grüße
- AutorBeitrag
Das Thema ‘Outlook Kontakt Notizfeld Format’ ist für neue Antworten geschlossen.