· IT-Automatisierung  · 2 min read

VBA-Makro: Outlook-Kontakte per Massenänderung automatisieren

Wer ein benutzerdefiniertes Outlook-Kontaktformular aktualisiert, stellt fest, dass bestehende Kontakte das alte Formular behalten. Dieses VBA-Skript stellt markierte Kontaktelemente per Massenaktion auf die neue Formularversion um.

Wer ein benutzerdefiniertes Outlook-Kontaktformular aktualisiert, stellt fest, dass bestehende Kontakte das alte Formular behalten. Dieses VBA-Skript stellt markierte Kontaktelemente per Massenaktion auf die neue Formularversion um.

VBA-Automatisierung für Outlook-Kontakte löst ein klassisches Problem: Nach einer Formularaktualisierung übernehmen nur neu angelegte Kontakte das neue Layout. Bestehende Kontakte bleiben auf dem alten Formular, weil die MessageClass-Eigenschaft des Elements nicht automatisch angepasst wird. Ein VBA-Makro erledigt die Massenänderung in Sekunden.

Das Problem

Wer in Outlook benutzerdefinierte Kontaktformulare nutzt, kennt das Verhalten: Nach einer Formularaktualisierung übernehmen nur neu angelegte Kontakte das neue Layout. Bestehende Kontakte behalten das alte Formular, weil die MessageClass-Eigenschaft nicht automatisch angepasst wird.

Lösung: VBA-Makro für Massenumstellung

Das folgende Makro fragt nach dem Namen des neuen Formulars und stellt alle markierten Kontaktelemente per Schleife um.

Sub KontakteFormularMassenAenderung()
    Dim objSelection As Outlook.Selection
    Dim i As Long
    Dim objItem As Object
    Dim strOldForm As String
    Dim strNewForm As String

    Set objSelection = Outlook.Application.ActiveExplorer.Selection

    If objSelection Is Nothing Then
        MsgBox "Es ist kein Element markiert.", vbExclamation + vbOKOnly
    Else
        strNewForm = InputBox("Name des neuen Formulars eingeben:", , "IPM.Contact.IhrFormularName")
        If strNewForm <> "" Then
            For i = objSelection.Count To 1 Step -1
                Set objItem = objSelection(i)
                strOldForm = objItem.MessageClass
                If LCase(strNewForm) <> LCase(strOldForm) Then
                    objItem.MessageClass = strNewForm
                    objItem.Save
                End If
            Next
            MsgBox "Abgeschlossen.", vbInformation + vbOKOnly
        End If
    End If
End Sub

Anwendung Schritt für Schritt

  1. Outlook öffnen, Alt + F11 drücken (VBA-Editor)
  2. Einfügen, Modul wählen
  3. Code einfügen
  4. Speichern
  5. Outlook-Kontakteordner öffnen
  6. Gewünschte Kontakte markieren (Strg + A für alle oder Einzelauswahl)
  7. Alt + F8, Makro KontakteFormularMassenAenderung ausführen
  8. Namen des neuen Formulars eingeben, bestätigen

Das Makro durchläuft die markierten Elemente rückwärts (For i = Count To 1 Step -1), um Indexverschiebungen bei Änderungen zu vermeiden. Nur Elemente mit abweichender MessageClass werden gespeichert.

Formularnamen herausfinden

Der Formularname entspricht dem MessageClass-Wert des Formulars. Zu finden unter: Entwicklertools > Entwurfsformular > Eigenschaften > Klasse (MessageClass).

Häufige Fragen

Funktioniert das Makro auch bei Exchange-gehosteten Postfächern? Ja, solange das Makro im lokalen Outlook läuft und der Benutzer Schreibrechte auf die Kontakte hat. Bei Exchange-Umgebungen mit zentralen Formular-Bibliotheken sollte der IT-Administrator den Rollout koordinieren.

Was passiert, wenn ein falscher Formularname eingegeben wird? Outlook speichert den Kontakt mit dem neuen MessageClass-Wert. Liegt das Formular nicht vor, zeigt Outlook einen Fallback auf das Standard-Kontaktformular. Das Makro lässt sich erneut mit dem korrekten Namen ausführen.

Kann ich alle Kontakte im Ordner auf einmal umstellen? Ja. Kontakteordner öffnen, Strg + A für alle Einträge, dann Makro ausführen. Bei großen Mengen (über 500 Kontakte) Testlauf mit wenigen Kontakten empfohlen.

Techiota entwickelt und wartet benutzerdefinierte Outlook-Formulare und Office-Automatisierungen für KMU in Hamburg. Sprechen Sie uns an über techiota.de.

Back to Blog

Related Posts

View All Posts »