Outlook Kontakt Notizfeld Format

Home-›Foren-›Outlook-›Outlook VBA-›Outlook Kontakt Notizfeld Format

Verschlagwortet: 

9 Antworten anzeigen - 16 bis 24 (von insgesamt 24)
  • Autor
    Beitrag
  • #1029416
    Mailhilfe
    Administrator

      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.

      #1029417
      Khun Bunsong
      Teilnehmer

        Alles 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

        #1029418
        Mailhilfe
        Administrator

          Fü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.

          #1029419
          Khun Bunsong
          Teilnehmer

            Hä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 Ersetzen

            Wü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.
            #1029421
            Khun Bunsong
            Teilnehmer

              Es geht nicht weiter…

              Anhänge:
              Sie müssen eingeloggt sein, um angehängte Dateien ansehen zu können.
              #1029423
              Mailhilfe
              Administrator

                Es 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.

                #1029424
                Khun Bunsong
                Teilnehmer

                  Guten 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 VBA

                  Habern Sie noch eine Idee?
                  Vielen Dank

                  #1029425
                  Mailhilfe
                  Administrator

                    Es 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.

                    #1029426
                    Khun Bunsong
                    Teilnehmer

                      Besten 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 2021

                      Vielen Dank und beste Grüße

                    9 Antworten anzeigen - 16 bis 24 (von insgesamt 24)

                    Das Thema ‘Outlook Kontakt Notizfeld Format’ ist für neue Antworten geschlossen.

                    -