trotz intensiver Recherchen muss ich mich in einer Frage an Eure Expertise wenden.
Problem:
Ich lese per SelectNamesDialog diverse Verteilerlisten aus der Globalen Adressliste (GAL) aus. Leider entsprechen nicht alle Verteilerlisten dem gleichen Listentyp, so dass ich über die Namensauflösung eine initiale Adressliste generieren muss. Heißt: alle GAL-Einträge mit der Bezeichnung "Verteiler" im Namen sollen im SelectNamesDialog angezeigt werden. Das gelingt in Outlook mühelos, wenn man über Erweiterte Suche "Verteiler" im Feld des Anzeigenamens eingibt. Mein Ansatz sieht derzeit so aus, streikt aber bei der Deklaration der gefilterten Listeneinträge als neue Liste (Laufzeitfehler 91).
Sub GALVerteilerfilter()
Dim outlApp As Outlook.Application
Dim outlNameSpace As Outlook.Namespace
Dim SND As SelectNamesDialog
Dim GAL As Outlook.AddressList
Dim GALEntries As Outlook.AddressEntries
Dim GALMember As Outlook.AddressEntry
Dim VTList As Outlook.AddressList
Dim VTListEntries As Outlook.AddressEntries
Const VTString As String = "Verteiler"
Dim VTEntries As String
Dim i As Long
Set outlApp = New Outlook.Application
Set outlNameSpace = outlApp.GetNamespace("MAPI")
Set SND = Outlook.session.GetSelectNamesDialog
Set GAL = outlNameSpace.GetGlobalAddressList()
Set GALEntries = GAL.AddressEntries
'Schleife durch alle Einträge in der GAL
For i = 1 To GALEntries.Count
Set GALMember = GALEntries.Item(i)
'prüfe, ob Eintrag die Namensbezeichnung "Verteiler" enthält
If InStr(GALMember.Name, VTString) > 0 Then
'fasse Einträge mit Bezeichner "Verteiler" in einem Listen-String zusammen
VTEntries = VTEntries & GALMember.Name & vbCrLf
End If
Next i
'kurze Überprüfung, ob Items korrekt gefiltert und in String geschrieben wurden
Debug.Print VTEntries
'erzeuge neue Adressliste mit Items, deren Namensbezeichnung "Verteiler" enthält
'--> hier kommt der Laufzeitfehler 91 :(
Set VTList = VTListEntries.AddressEntries.Add(VTEntries)
'zeige Auswahldialog mit InitialListe aller Einträge mit der Bezeichnung "Verteiler"
SND.InitialAddressList = VTList
SND.Recipients = Nothing
SND.NumberOfRecipientSelectors = Outlook.OlRecipientSelectors.olShowTo
SND.ToLabel = "Verteiler hinzufügen"
SND.ShowOnlyInitialAddressList = True
SND.AllowMultipleSelection = True
End Sub
Sub GALVerteilerfilter()
Dim outlApp As Outlook.Application
Dim outlNameSpace As Outlook.Namespace
Dim SND As SelectNamesDialog
Dim GAL As Outlook.AddressList
Dim GALEntries As Outlook.AddressEntries
Dim GALMember As Outlook.AddressEntry
Dim VTList As Outlook.AddressList
Dim VTListEntries As Outlook.AddressEntries
Const VTString As String = "Verteiler"
Dim VTEntries As String
Dim i As Long
Set outlApp = New Outlook.Application
Set outlNameSpace = outlApp.GetNamespace("MAPI")
Set SND = Outlook.session.GetSelectNamesDialog
Set GAL = outlNameSpace.GetGlobalAddressList()
Set GALEntries = GAL.AddressEntries
'Schleife durch alle Einträge in der GAL
For i = 1 To GALEntries.Count
Set GALMember = GALEntries.Item(i)
'prüfe, ob Eintrag die Namensbezeichnung "Verteiler" enthält
If InStr(GALMember.Name, VTString) > 0 Then
'fasse Einträge mit Bezeichner "Verteiler" in einem Listen-String zusammen
VTEntries = VTEntries & GALMember.Name & vbCrLf
End If
Next i
'kurze Überprüfung, ob Items korrekt gefiltert und in String geschrieben wurden
Debug.Print VTEntries
'erzeuge neue Adressliste mit Items, deren Namensbezeichnung "Verteiler" enthält
'--> hier kommt der Laufzeitfehler 91 :(
Set VTList = VTListEntries.AddressEntries.Add(VTEntries)
'zeige Auswahldialog mit InitialListe aller Einträge mit der Bezeichnung "Verteiler"
SND.InitialAddressList = VTList
SND.Recipients = Nothing
SND.NumberOfRecipientSelectors = Outlook.OlRecipientSelectors.olShowTo
SND.ToLabel = "Verteiler hinzufügen"
SND.ShowOnlyInitialAddressList = True
SND.AllowMultipleSelection = True
End Sub
Warum übernimmt er den korrekten String nicht als Grundlage für ein neues Outlook-Adresslistenobjekt?
Bin für jede Hilfe oder Hinweis dankbar.,
Viele Grüße
Kalle