uppe
Goto Top

Alle Verteiler erweitern

Hallo,

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

Content-ID: 137393

Url: https://administrator.de/contentid/137393

Ausgedruckt am: 26.11.2024 um 21:11 Uhr

RedWraith
RedWraith 04.03.2010 um 13:22:45 Uhr
Goto Top
Also, bei dir steht im Moment sowas wie:

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