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
- 22. Januar 2023 um 09:45 #1029391MailhilfeKeymaster
Sie können die “Replace”-Methode des “Selection”-Objekts verwenden, um mehrere Leerzeichen durch Tabs zu ersetzen. Hier ist ein Beispiel, wie Sie es in Ihrem Code integrieren 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“
Doc.Content.WholeStory.Select
Doc.Content.Find.Execute FindText:=” “, ReplaceWith:=”^t”, Replace:=wdReplaceAll
End SubDieser Code wählt den gesamten Inhalt des Notizfelds aus und ersetzt dann alle zwei Leerzeichen durch Tabs. Bitte beachten Sie, dass die Syntax für das Suchen und Ersetzen in Outlook anders ist als in Word. In Outlook müssen Sie die “Find”- und “Replace”-Methoden des “Selection”-Objekts verwenden.
23. Januar 2023 um 09:08 #1029398Khun BunsongParticipantMoin, moin,
besten Dank für die Hilfe und so schnell.
Leider bekomme ich einen Fehler, hier: FindText:=“ „ Fehler Anweisungsende erwartet,
nach Änderung meinerseits in FindText:=” ” ganze Zeile rot, SyntaxfehlerKönnen Sie bitte nochmals Änderungen vornehmen
vielen Dank23. Januar 2023 um 10:36 #1029399MailhilfeKeymasterEs tut mir leid, dass ich den Fehler verursacht habe. Der Fehler liegt daran, dass ich ein doppeltes Leerzeichen verwendet habe, anstatt eines einfachen Leerzeichens. Hier ist der korrigierte Code:
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“
Doc.Content.WholeStory.Select
Doc.Content.Find.Execute FindText:=” “, ReplaceWith:=”^t”, Replace:=wdReplaceAll
End SubIn diesem Code wird nur ein einzelnes Leerzeichen verwendet, um mehrere Leerzeichen zu suchen und durch Tabs zu ersetzen. Bitte beachten Sie, dass Sie auch das Replace-Argument in der Execute-Methode angeben müssen, damit die Ersetzung durchgeführt wird.
Lassen Sie mich wissen, ob es funktioniert hat oder ob Sie weitere Probleme haben.
23. Januar 2023 um 12:35 #1029400Khun BunsongParticipantHallo und vielen Dank,
Sie müssen sich für NICHTS entschuldigen, ich bedanke mich für die Hilfe.
Leider kommt die Zeile in rot:
Doc.Content.Find.Execute FindText:=“ „, ReplaceWith:=“^t“, Replace:=wdReplaceAll
Habe „ “ und „^t“ Anführungszeichen, Fehler immer noch Syntax
Bin leider kein VBAlerVielleicht haben Sie noch eine Idee?
23. Januar 2023 um 13:18 #1029401Khun BunsongParticipantDer Debug kommt gelb hier:
Doc.Content.WholeStory.SelectAngepasst habe ich die Anführungszeichen so:
Doc.Content.Find.Execute FindText:=” “, ReplaceWith:=”^t”, Replace:=wdReplaceAllOhne die Zeile: Doc.Content.WholeStory.Select läuft das Makro Modul ohne Fehler, leider nur die Zeichen Calibri 14 werden angewendet, die mehr als 1 Leerzeichen Ersetzung durch einen Tab funktioniert nicht
23. Januar 2023 um 13:29 #1029402MailhilfeKeymasterEs tut mir leid, dass es Probleme mit der Syntax gab und dass die Ersetzung von Leerzeichen durch Tabs nicht funktioniert hat.
Ein möglicher Grund, warum die Ersetzung nicht funktioniert, ist, dass das Selection-Objekt nicht richtig ausgewählt wird. Sie sollten die Methode “WholeStory.Select” verwenden, um den gesamten Text im Dokument auszuwählen, bevor Sie die Ersetzung durchführen.
Hier ist der korrigierte Code:
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 Doc.Content.WholeStory.Select Doc.Content.Find.Execute FindText:=" ", ReplaceWith:="^t", Replace:=wdReplaceAll End Sub
Lassen Sie mich wissen, ob es jetzt funktioniert hat.
23. Januar 2023 um 13:56 #1029403Khun BunsongParticipantDanke erstmal, aber leider sieht es so aus:
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
Doc.Content.WholeStory.Select
Doc.Content.Find.Execute FindText:=“ „, ReplaceWith:=“^t“, Replace:=wdReplaceAll
End SubZeile FETT ist in ROT nach Kopie in das Modul
Es will nicht…23. Januar 2023 um 14:08 #1029404MailhilfeKeymasterErsetzen Sie mal bitte die doppelten Anführungszeichen (“”) in einfache Anführungszeichen (‘)
23. Januar 2023 um 14:11 #1029405Khun BunsongParticipantHier im Anhang ein Bild: Erwartet Anweisungsende hier:
FindFormat:=“ „Bild im Anhang
23. Januar 2023 um 14:13 #1029407MailhilfeKeymasterDoc.Content.Find.Execute FindText:=" ", ReplaceWith:="^t", Replace:=wdReplaceAll
23. Januar 2023 um 14:24 #1029408Khun BunsongParticipantBei Ausführung kommt DEBUG Meldung und die sieht so aus:
23. Januar 2023 um 14:58 #1029410MailhilfeKeymasterEs tut mir leid, dass ich Ihnen nicht früher gesagt habe, dass die Methode “WholeStory.Select” möglicherweise nicht verfügbar ist, je nach Version von Outlook, die Sie verwenden. Es gibt einige alternative Möglichkeiten, den gesamten Text im Dokument auszuwählen, bevor Sie die Ersetzung durchführen.
Eine Möglichkeit besteht darin, die Methode “Range.Select” zu verwenden. 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 Doc.Range.Select Doc.Content.Find.Execute FindText:=" ", ReplaceWith:="^t", Replace:=wdReplaceAll End Sub
In diesem Code wird die Methode “Range.Select” verwendet, um den gesamten Text im Dokument auszuwählen, bevor die Ersetzung durchgeführt wird.
Eine andere Möglichkeit besteht darin, den gesamten Text im Dokument direkt in eine Variable zu speichern und die Ersetzung auf dieser Variable durchzuführen. 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 strText = Replace(strText, " ", "^t") Doc.Content.Text = strText End Sub
In diesem Code wird der gesamte Text im Dokument in die Variable strText gespeichert und dann die Ersetzung auf dieser Variable durchgeführt.
Bitte versuchen Sie beide Methoden und lassen Sie mich wissen, welche Methode für Sie am besten funktioniert hat.
23. Januar 2023 um 15:12 #1029411Khun BunsongParticipantDer Code läuft jetzt durch ohne Fehler, leider sieht das Ergebnis so aus:
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
Das ganz ist doch nicht so einfach realisierbar?
Denke das was da im Shortcut geht: Suchen und Ersetzen mit Platzhalter ^t” muss im VBA anders aussehen? Danke für Ihr Wissen und die Mühe mit mir23. Januar 2023 um 15:51 #1029412Khun BunsongParticipantHier mal eine Darstellung von Ausgang bis gewünschtem Ergebnis, dass ich bisher mit SUCHEN ERSETZEN manuell mache:
23. Januar 2023 um 16:51 #1029416MailhilfeKeymasterDer 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.
- AutorBeitrag
Das Thema ‘Outlook Kontakt Notizfeld Format’ ist für neue Antworten geschlossen.