Notizen in Outlook Kontakte formatieren (Größe/Fond/Farbe) VBA

Home-›Foren-›Outlook-›Outlook VBA-›Notizen in Outlook Kontakte formatieren (Größe/Fond/Farbe) VBA

9 Antworten anzeigen - 1 bis 9 (von insgesamt 9)
  • Autor
    Beitrag
  • #1030725
    Jenson
    Teilnehmer

      Hallo zusammen!

      Ich möchte gerne die in Excel eingegeben Kundendaten automatisch über einen Button in Outlook-Kontakte anlegen lassen.(Funzt gut.. siehe VBA anbei)

      Wobei ich Probleme habe ist, es soll im Notizfeld (Outlook-Kontakte) ein Text mit einer speziellen farblichen und größen Farmatierung eingefügt werden. (ggf. auch diverse Fonds) Optimalerweise gespickt mit Variablen die weitere Kundendaten festhalten.

      Hier der Code für die Anlage des Kunden mit den Daten aus der Exceltabelle:

      Sub Outlook_Kontakt_anlegen2()

      Dim oOutContacts As Object, i As Integer

      ‘Alle Eingabefelder müssen ausgefüllt sein

      If Range(“Eingabe!D5”).Value <> 0 And Range(“Eingabe!C5”).Value <> 0 And Range(“Eingabe!C6”).Value <> 0 And Range(“Eingabe!C7”).Value <> 0 And Range(“Eingabe!D7”).Value <> 0 And Range(“Eingabe!C9”).Value <> 0 Then

      With CreateObject(“Outlook.Application”)
      Set oOutContacts = .GetNamespace(“MAPI”).GetDefaultFolder(10)

      With oOutContacts.Items.Add
      .FirstName = Range(“Eingabe!D5”)
      .LastName = “Nachname”
      .CompanyName = “GlasGO GmbH”
      .HomeAddressStreet = Range(“Eingabe!C6”)
      .birthday = Range(“Eingabe!C9”)
      .Email1Address = Range(“Eingabe!C10”)
      .MobileTelephoneNumber = Range(“Eingabe!C11”)
      .HomeTelephoneNumber = Range(“Eingabe!C12”)
      .BusinessTelephoneNumber = Range(“Eingabe!C13”)
      .Categories = “Termin”
      .Save
      End With
      End With
      MsgBox “Outlook Kontakt ist angelegt !”
      Else
      MsgBox “Daten unvollständig !”
      End If

      End Sub

      Anbei ein kleines Bespiel, wie ich mir die Formatierung des Notizfeldes vorstelle.
      Über VBA automatisiert eingespielt…..

      Lieben Dank für die tollen Inspirationen und Codes!!

      lg

      Jenson

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

        Hallo!
        Für Ihre Anforderung, das Notizfeld in Outlook-Kontakten mit speziellen Formatierungen zu versehen, müssen wir die HTML-Formatierung verwenden, da Outlook die Notizfelder im HTML-Format unterstützt.

        Zunächst sollten Sie den bestehenden VBA-Code so anpassen, dass das Notizfeld (Body) des Kontakts bearbeitet wird. Sie können HTML-Formatierungen wie Farbe und Schriftgröße verwenden, um das gewünschte Erscheinungsbild zu erzielen. Hier ist ein grundlegendes Beispiel, das zeigt, wie Sie HTML-Tags verwenden können, um den Text im Notizfeld zu formatieren:

        Sub Outlook_Kontakt_anlegen2()
        ‘ … Ihr bestehender Code …

        With oOutContacts.Items.Add
        ‘ … Ihre bestehenden Zuweisungen …

        ‘ Hier fügen wir das formatierte Notizfeld hinzu
        .Body = “<html><body>” & _
        “<p style=’font-size:14px; color:blue;’>Hier steht Ihr Text.</p>” & _
        “<p><b>Variablenbeispiel:</b> ” & Range(“Eingabe!D5”).Value & “</p>” & _
        “</body></html>”

        .Save
        End With

        ‘ … Rest Ihres Codes …
        End Sub

        In diesem Beispiel wird ein Absatz (<p>) mit blauer Schriftfarbe und einer Schriftgröße von 14px erstellt. Sie können diese HTML-Struktur an Ihre Bedürfnisse anpassen, einschließlich der Verwendung von Variablen aus Ihrer Excel-Tabelle.

        Beachten Sie, dass die Verwendung von HTML in Outlook bestimmte Einschränkungen hat. Es unterstützt nicht alle HTML- und CSS-Funktionen, die in modernen Webbrowsern verfügbar sind. Daher sollten Sie die Formatierung möglichst einfach halten.

         

        #1030730
        Jenson
        Teilnehmer

          Danke an euch beide!

          Mega Ansatz – nur wird bei mir leider im Kontakt-Notizen der

          Text 1:1 mit HTML-Code angezeigt…

          Muß man da etwas vorher aktivieren? ggf. in den Grundeinstellungen von Outlook?

          Lieben Gruß,

          Jens

          #1030731
          Mailhilfe
          Administrator

            Das Problem liegt darin, dass das Notizfeld eines Outlook-Kontakts standardmäßig nicht HTML interpretiert, sondern als reiner Text behandelt wird. Um HTML-Formatierung in Outlook-Kontakten zu nutzen, müssen wir auf das RTFBody-Attribut des Kontaktobjekts zugreifen.

            Rich Text Format (RTF) ist ein Format, das von Outlook zur Formatierung von Text in Notizen verwendet wird. Sie können den HTML-Code in RTF konvertieren, bevor Sie ihn dem Kontakt hinzufügen. Leider bietet VBA keine direkte Unterstützung für die Umwandlung von HTML in RTF. Es gibt jedoch einige Umwege, wie Sie dies erreichen können:

            1. Verwendung eines Drittanbieter-Tools: Es gibt einige Tools und Bibliotheken, die HTML in RTF konvertieren können. Diese Tools können als externe Komponenten in Ihr VBA-Projekt eingebunden werden.
            2. Manuelle Konvertierung: Sie könnten den HTML-Text manuell in RTF konvertieren und dann diesen RTF-Text im RTFBody-Attribut des Kontakts speichern. Diese Methode erfordert jedoch ein gutes Verständnis des RTF-Formats.
            3. Automatisierung von Word: Eine andere Möglichkeit ist die Verwendung von Word (falls installiert) zur Konvertierung des HTML-Codes in RTF. Hierfür würden Sie Word im Hintergrund öffnen, den HTML-Text einfügen, ihn in RTF konvertieren und dann in das Kontakt-Notizfeld kopieren. Dies ist eine etwas umständliche, aber machbare Lösung.

            Hier ist ein Beispiel, wie Sie die Automatisierung von Word zur Konvertierung von HTML in RTF in VBA verwenden könnten:

            Function ConvertHtmlToRtf(htmlText As String) As String
            Dim wordApp As Object
            Dim doc As Object

            ‘ Word-Instanz erstellen
            Set wordApp = CreateObject(“Word.Application”)

            ‘ Neues Dokument erstellen
            Set doc = wordApp.Documents.Add

            ‘ HTML-Text einfügen
            doc.Range(0, 0).PasteHTML htmlText

            ‘ In RTF konvertieren
            ConvertHtmlToRtf = doc.Range(0, doc.Range.End).RTF

            ‘ Aufräumen
            doc.Close False
            Set doc = Nothing
            wordApp.Quit
            Set wordApp = Nothing
            End Function

            Sub Outlook_Kontakt_anlegen2()
            ‘ … Ihr bestehender Code …

            With oOutContacts.Items.Add
            ‘ … Ihre bestehenden Zuweisungen …

            ‘ Konvertieren Sie HTML in RTF und fügen Sie es hinzu
            .RTFBody = ConvertHtmlToRtf(“<html><body><p style=’font-size:14px; color:blue;’>Hier steht Ihr Text.</p><p><b>Variablenbeispiel:</b> ” & Range(“Eingabe!D5”).Value & “</p></body></html>”)

            .Save
            End With

            ‘ … Rest Ihres Codes …
            End Sub

             

            Beachten Sie, dass diese Methode voraussetzt, dass Microsoft Word auf dem Computer installiert ist, auf dem das Skript ausgeführt wird.

             

             

            #1030732
            Jenson
            Teilnehmer

              Fürs erste würde es mir reichen, wenn über .body ein fester fertig Formatierter Text automatisch in den neuen Outlook-Kontakt unter Notizen eingefügt wird. Zur Zeit ist die Vorlage als Textfelfd gespeichert. Kann man ein Textfeld oder Schnellbaustein über VBA ansprechen?

              lg

              Jenson

              #1030733
              Mailhilfe
              Administrator

                Ja, es ist möglich, ein Textfeld oder einen Schnellbaustein (Quick Part) in Microsoft Outlook über VBA anzusprechen und den Inhalt in das Notizfeld eines Kontakts einzufügen. Allerdings gibt es einige Unterschiede im Ansatz, je nachdem, ob Sie ein Textfeld oder einen Schnellbaustein verwenden.

                Verwendung eines Textfelds:

                Wenn Sie ein Textfeld in einer Excel-Datei haben, können Sie den Text daraus einfach auslesen und in das Notizfeld des Outlook-Kontakts kopieren. Hier ist ein Beispiel, wie das aussehen könnte:

                Sub Outlook_Kontakt_anlegen_mit_Textfeld()
                ‘ … Ihr bestehender Code …

                Dim textFeldInhalt As String
                textFeldInhalt = Sheets(“IhrBlatt”).Shapes(“IhrTextfeld”).TextFrame.Characters.Text

                With oOutContacts.Items.Add
                ‘ … Ihre bestehenden Zuweisungen …
                .Body = textFeldInhalt
                .Save
                End With

                ‘ … Rest Ihres Codes …
                End Sub

                Ersetzen Sie "IhrBlatt" mit dem Namen des Excel-Blatts und "IhrTextfeld" mit dem Namen Ihres Textfeldes.

                Verwendung eines Schnellbausteins (Quick Part):

                Wenn Sie in Outlook einen Schnellbaustein (Quick Part) für die Notiz haben, wird es komplizierter, da VBA keinen direkten Zugriff darauf bietet. Eine Möglichkeit wäre, den Schnellbaustein in einer E-Mail zu verwenden und dann den Inhalt dieser E-Mail in das Notizfeld des Kontakts zu kopieren. Dies ist jedoch nicht gerade effizient und kann zu Problemen führen, wenn die E-Mail-Formatierung nicht mit dem Notizfeld kompatibel ist.

                Eine andere Möglichkeit besteht darin, den Text des Schnellbausteins in einer separaten Datei zu speichern (zum Beispiel in einer Textdatei) und diesen Text dann in das Notizfeld des Kontakts zu kopieren, ähnlich wie bei der Verwendung eines Textfelds in Excel.

                Zusammenfassung:

                Für eine einfache und zuverlässige Lösung empfehle ich, den fest formatierten Text entweder direkt im VBA-Code zu speichern oder aus einem Textfeld in einer Excel-Datei zu lesen. Die Verwendung eines Schnellbausteins in Outlook ist über VBA weniger direkt und könnte zu unnötigen Komplikationen führen.

                #1030736
                Mailhilfe
                Administrator
                  #1030752
                  Jenson
                  Teilnehmer

                    Hallo zusammen,

                    ich bin der Herausforderung das Notizfeld (Notizen) in Outlook Kontakte / Personen

                    zu formatieren näher gekommen. Hier zwei Lösungsansätze die ich leider nicht kombiniert bekomme:

                    A) Formatierten Text in gerade geöffnetem Kontakt einfügen/ändern
                    Farbe / Schriftart / Größe
                    (Habe den Farbcode noch nicht verstanden 1000=rot, 1=schwarz, …)

                    Sub Notizen_Outlook_Kontakte()
                    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.Font.Color = 1000
                    ‘Doc.Content.Font.FontStyle = Bold… geht nicht – Warum?
                    Dim strText As String
                    Doc.Content.Text = “Text der im gerade geöffneten Outlook Kontakte – Notzfeld ausgegeben wird.”
                    End Sub

                    B) SO WIE ES SEIN SOLL. DER OUTLOOK KONTAKT WIRD NEU GESCHRIBEN MIT DEN DATEN, WELCHE VORHER IN DER EXCELTABELLE ERFASST WURDEN.
                    Leider ohne jedliche Formatierung (Größe / Farbe /  Schriftart) im .Body = Notizfeld

                    Sub Outlook_Kontakt_anlegen()

                    Dim oOutContacts As Object, i As Integer
                    Dim myColor As Integer
                    Dim myNote As Object

                    If Range(“Eingabe!D5”).Value <> 0 And Range(“Eingabe!C5”).Value <> 0 And Range(“Eingabe!C6”).Value <> 0 And Range(“Eingabe!C7”).Value <> 0 And Range(“Eingabe!D7”).Value <> 0 And Range(“Eingabe!C9”).Value <> 0 Then

                    With CreateObject(“Outlook.Application”)
                    Set oOutContacts = .GetNamespace(“MAPI”).GetDefaultFolder(10)

                    With oOutContacts.Items.Add
                    .FirstName = Range(“Eingabe!D5″) & ” ” & Range(“Eingabe!C5”)
                    .LastName = “-” & Range(“Eingabe!C8”) & “-”
                    .CompanyName = “Go Yellow GmbH”
                    .HomeAddressStreet = Range(“Eingabe!C6”) & “, ” & Range(“Eingabe!C7″) & ” ” & Range(“Eingabe!D7”)

                    If Range(“Eingabe!C9”).Value <> 0 Then
                    .birthday = Range(“Eingabe!C9”)
                    End If
                    .Email1Address = Range(“Eingabe!C10”)
                    .MobileTelephoneNumber = Range(“Eingabe!C11”)
                    .HomeTelephoneNumber = Range(“Eingabe!C12”)
                    .BusinessTelephoneNumber = Range(“Eingabe!C13”)
                    .Categories = “0GTermin, Gothaer”

                    .Body = “KundenklasseABCDE (G?)” & Chr(9) & Chr(9) & “-Quelle-” & Chr(9) & Chr(9) & “Version20.0” & vbNewLine & “ToDo: …. Letzter Vorort-Termin: XXX (MA) / Termin: XXX WV: 1 – 3 – 5 Jahr(e)” & vbNewLine & _
                    Chr(9) & “1)” & Chr(9) & vbNewLine & “Bestand:” & Chr(9) & “GEWERBE ( )” & Chr(9) & “PRIVAT( )” & vbNewLine & Chr(9) & _
                    Range(“Eingabe!D5″) & ” ” & Range(“Eingabe!C5″) & ” *” & Range(“Eingabe!C9″) & ” F: B: GKV: UWG-G: UWG” & vbNewLine & _
                    Chr(9) & “Partner:” & vbNewLine & Chr(9) & “Komm.-Vollmacht:”

                    .Save
                    End With

                    End With
                    MsgBox “Outlook Kontakt für Outlook-LuK ist angelegt !”
                    Else
                    MsgBox “Daten unvollständig !”
                    End If

                    End Sub

                    Ziel ist es einen neuen Outlook Kontakt mit den Informationen aus der Exceltabelle zu erzeugen
                    und ein bestimmter Text in dem Notizfeld wiedergegeben wird. Dieser soll jedoch unterschiedliche Farben und Schriftarten und – größen haben.

                    Zwei Probleme mit den obigen Codes:
                    1. .body bzw .text kann nur komplett formatiert werden nur rot oder nur Arial-

                    Ich mochte gerne die einzelnen Zeilen unterschiedlich formatieren….

                    2. Ich bekomme es nicht hin beide Codes zu verbinden. Entweder bereits geöffneten Kontakt
                    formatieren und z.B. die Farbe anpassen oder einen neuen Kontakt schaffen aber das Notizfeld bleibt schwarz/weiss und ist unformatiert.

                    Bin gespannt auf eure Ideen – Lieben Dank schon mal..

                    Jenson

                    #1030753
                    Mailhilfe
                    Administrator

                      Um Ihr Ziel zu erreichen, einen neuen Outlook-Kontakt mit formatierten Notizen aus einer Excel-Tabelle zu erstellen, müssen wir zwei Hauptprobleme lösen:

                      1. Erstellen eines neuen Outlook-Kontakts mit Daten aus Excel.
                      2. Hinzufügen von formatiertem Text zum Notizfeld des Kontakts, wobei verschiedene Teile des Textes unterschiedliche Formate (Farben, Schriftarten, Größen) haben.

                      Leider unterstützt das .Body-Attribut eines Outlook-Kontakts, wie Sie festgestellt haben, keine Rich-Text- oder HTML-Formatierung. Es behandelt den Text als reinen Text ohne Formatierung. Um formatierten Text hinzuzufügen, müssen wir den Umweg über das RTFBody-Attribut gehen, was allerdings komplexer ist, da VBA keine direkte Unterstützung für die Umwandlung von Text in RTF-Format bietet.

                      Lösungsansatz:

                      1. Erstellen Sie den Kontakt mit den Basisdaten aus Excel. Das haben Sie bereits in Ihrem Code umgesetzt.
                      2. Formatieren Sie den Text im RTF-Format. Hierbei müssen Sie den Text, den Sie in das Notizfeld einfügen möchten, in das RTF-Format konvertieren. Dies kann manuell erfolgen, indem Sie die RTF-Codierung für die verschiedenen Formatierungen, die Sie benötigen, herausfinden und den Text entsprechend formatieren. Alternativ können Sie ein Word-Dokument als Zwischenlösung verwenden, um den Text zu formatieren und dann den RTF-Code zu extrahieren.
                        • Manuelle Konvertierung: Sie könnten den RTF-Code für verschiedene Farben, Schriftgrößen usw. recherchieren und Ihren Text entsprechend codieren. Das ist jedoch technisch anspruchsvoll und fehleranfällig.
                        • Automatisierung von Word: Erstellen Sie ein Word-Dokument, fügen Sie Ihren Text ein und formatieren Sie ihn wie gewünscht. Dann extrahieren Sie den RTF-Code aus Word und fügen ihn in das RTFBody-Attribut des Outlook-Kontakts ein. Dies ist umständlich, aber eine praktikable Lösung.

                      Beispielcode für die Automatisierung von Word:

                      Function GetRtfFromWord(text As String) As String
                      Dim wordApp As Object, doc As Object, rtfText As String
                      Set wordApp = CreateObject(“Word.Application”)
                      Set doc = wordApp.Documents.Add
                      wordApp.Visible = False

                      doc.Content.Text = text
                      ‘ Hier fügen Sie die Formatierung hinzu, z.B.:
                      ‘ doc.Content.Font.Name = “Calibri”
                      ‘ doc.Content.Font.Size = 14
                      ‘ doc.Content.Font.ColorIndex = wdRed
                      ‘ … Weitere Formatierungen …

                      rtfText = doc.Content.Paragraphs(1).Range.RTFText

                      doc.Close False
                      Set doc = Nothing
                      wordApp.Quit
                      Set wordApp = Nothing

                      GetRtfFromWord = rtfText
                      End Function

                      Sub Outlook_Kontakt_anlegen_mit_RTFBody()
                      ‘ … Ihr bestehender Code zum Erstellen des Kontakts …

                      ‘ Erstellen Sie den formatierten RTF-Text
                      Dim formattedRtf As String
                      formattedRtf = GetRtfFromWord(“Ihr formatierter Text”)

                      With oOutContacts.Items.Add
                      ‘ … Ihre bestehenden Zuweisungen …
                      .RTFBody = formattedRtf
                      .Save
                      End With

                      ‘ … Rest Ihres Codes …
                      End Sub

                      In diesem Beispiel müssen Sie die Formatierung im Word-Dokument entsprechend Ihrem Bedarf anpassen. Beachten Sie, dass dieses Verfahren voraussetzt, dass Microsoft Word auf Ihrem System installiert ist.

                      Diese Methode ist etwas umständlich, aber sie ermöglicht es Ihnen, komplexe Formatierungen im Notizfeld eines Outlook-Kontakts vorzunehmen.

                       

                    9 Antworten anzeigen - 1 bis 9 (von insgesamt 9)

                    -