Alle Verteiler erweitern
Hallo,
mit Hilfe diverser Foren habe ich folgenden Code zusammengebastelt:
Bisher durchsucht das Programm alle Verteilerlisten in einem Ordner und schreibt die Mitglieder dieser Listen in Spalte B und C. In B kommen alle Mail-Adressen, in C alle Verteiler, die in dem oberen Verteiler enthalten sind.
Nun möchte ich eine kleine Änderung. Ich möchte, dass er die enthaltenen Verteiler nicht mehr in Spalte C schreibt, sondern auch erweitert. Am Ende sollen zu dem obersten Verteiler nur noch Namen in Spalte B stehen.
Wie muss ich den Code verändern?
Danke und Gruß Uppe
mit Hilfe diverser Foren habe ich folgenden Code zusammengebastelt:
Private Sub CommandButton1_Click()
'Deklaration
Dim OutApp As Object
Dim nspMapi As Object
Dim folMapi As Object
Dim itmAll As Object
Dim itmReal As Object
Dim itmDistList As Object
Dim strContactFilter As String
Dim excApp As Object
Dim excWkb As Object
Dim excWks As Object
Dim intRow As Integer
Dim i As Integer
Dim j As Integer
Dim k As Integer
Set OutApp = CreateObject("Outlook.Application")
'Outlook-Objekte öffnen
Set nspMapi = OutApp.GetNamespace("MAPI")
'Set folMapi = nspMapi.GetDefaultFolder(olFolderContacts)
'Ordner auswählen
Set folMapi = nspMapi.Folders.Item("Public Folders").Folders.Item("Contacts")
Set itmAll = folMapi.Items
'nur Verteilerlisten verwenden
strContactFilter = "[MessageClass] = 'IPM.Distlist'"
Set itmReal = itmAll.Restrict(strContactFilter)
'Excel-Objekte öffnen
Set excApp = CreateObject("Excel.Application") 'Neue Excel-Instanz
Set excWkb = excApp.Workbooks.Add 'Neues Workbook anlegen
Set excWks = excWkb.Sheets(1) 'Erstes Sheet
'Excel-Worksheet aufbereiten
With excWks
'Sheet-Name
.Name = "Outlook-Verteilerlisten"
'Spaltenüberschriften
.Cells(1, 1).Value = "Verteiler"
.Cells(1, 2).Value = "Name"
'Spaltenüberschriften fett
.Rows("1:1").Font.Bold = True
'Outlook-Verteilerliste nach Excel übertragen
intRow = 1
'Excel einblenden
excApp.Visible = True
For Each itmDistList In itmReal
.Cells(intRow + 1, 1).Value = itmDistList.DLName
j = 1
k = 1
For i = 1 To itmDistList.MemberCount
If InStr(1, itmDistList.GetMember(i).Address, "@") Then
.Cells(intRow + k, 2).Value = itmDistList.GetMember(i).Address
k = k + 1
Else
.Cells(intRow + j, 3).Value = itmDistList.GetMember(i).Name
j = j + 1
End If
Next i
intRow = intRow + WorksheetFunction.Max(k, j)
Next itmDistList
'Optimale Spaltenbreite
.Columns.AutoFit
End With
'Speicher freigeben
Set itmReal = Nothing
Set itmAll = Nothing
Set folMapi = Nothing
Set nspMapi = Nothing
Set excWks = Nothing
Set excWkb = Nothing
Set excApp = Nothing
End Sub
Bisher durchsucht das Programm alle Verteilerlisten in einem Ordner und schreibt die Mitglieder dieser Listen in Spalte B und C. In B kommen alle Mail-Adressen, in C alle Verteiler, die in dem oberen Verteiler enthalten sind.
Nun möchte ich eine kleine Änderung. Ich möchte, dass er die enthaltenen Verteiler nicht mehr in Spalte C schreibt, sondern auch erweitert. Am Ende sollen zu dem obersten Verteiler nur noch Namen in Spalte B stehen.
Wie muss ich den Code verändern?
Danke und Gruß Uppe
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 137393
Url: https://administrator.de/contentid/137393
Ausgedruckt am: 26.11.2024 um 21:11 Uhr
1 Kommentar
Also, bei dir steht im Moment sowas wie:
Und du möchtest jetzt folgendes:
Sehe ich das richtig ?
Wenn nein, dann habe ich dich leider falsch verstanden.
Auf jeden Fall realisiert man Obiges am Einfachsten, in dem du dir merkst, welchen Verteilerlistennamen du zuletzt ausgegeben hast und wenn der zuletzt Ausgegebene derselbe ist, wie der, der als nächstes ausgegeben werden würde, dann verhinderst du das schreiben einfach.
Verteiler | Addy
---------------------------
Konferenz | Klaus@xy.de
Konferenz | Monika@xy.de
Konferenz | Mike@xy.de
Buchhaltung | Jenny@xy.de
Buchhaltung | Peter@xy.de
Und du möchtest jetzt folgendes:
Verteiler | Addy
-----------------------------
Konferenz | Klaus@xy.de
| Monika@xy.de
| Mike@xy.de
Buchhaltung | Jenny@xy.de
| Peter@xy.de
Sehe ich das richtig ?
Wenn nein, dann habe ich dich leider falsch verstanden.
Auf jeden Fall realisiert man Obiges am Einfachsten, in dem du dir merkst, welchen Verteilerlistennamen du zuletzt ausgegeben hast und wenn der zuletzt Ausgegebene derselbe ist, wie der, der als nächstes ausgegeben werden würde, dann verhinderst du das schreiben einfach.
if itmDistList.DLName <> LetzterVerteiler then
.Cells(intRow + 1, 1).Value = itmDistList.DLName
else
.Cells(intRow + 1, 1).Value = ""
end if
LetzterVerteiler=itmDistList.DLName