Anzeige
Archiv - Navigation
1900to1904
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Exchange Daten einer Abt. in Listbox

Exchange Daten einer Abt. in Listbox
02.10.2022 13:53:22
Erni
Hallo zusammen,
ich habe eine Frage bezüglich des Befüllens einer Listbox / oder Combox.
Wir haben auf der Arbeit einen Exchange_Server, auf dem alle Daten zu den Mitarbeitern erfasst sind.
Jetzt würde ich gerne das Adressbuch dort nutzen, um alle Mitarbeiter meiner Abteilung aufzulisten. Dies soll in einer Combobox und einer Listbox geschehen.
Für die Abfrage des Servers habe ich bislang folgende Funktion verwendet:

Public Function GetNameDetails(var1, var2 As String)
Dim outApp As Object
Dim outTI As Object
Dim outRec As Object
Dim outAL As Object
Set outApp = CreateObject("Outlook.Application")
Set outAL = outApp.Session.addressLists.Item("Globale Adressliste")
Set outTI = outApp.CreateItem(3)
Set outRec = outTI.Recipients.Add(var1)
outRec.Resolve
If outRec.Resolved Then
'Hier Variablen abrufen: https://learn.microsoft.com/en-us/office/vba/api/outlook.exchangeus
If var2 = "Department" Then GetNameDetails = outRec.addressEntry.GetExchangeUser.department
If var2 = "Email" Then GetNameDetails = outRec.addressEntry.GetExchangeUser.PrimarySmtpAddress
If var2 = "Alias" Then GetNameDetails = outRec.addressEntry.GetExchangeUser.Alias
Else
GetNameDetails = ""
End If
Set outApp = Nothing
Set outAL = Nothing
Set outTI = Nothing
Set outRec = Nothing
End Function
Sub Test()
GetNameDetails("muserterm1", "Email")
'Als Ergebnis kam dann die Email zum Hans Mustermann, der unter musterm1 nur als einziger gelistet wird
end sub
Jetzt meine Frage noch mal detailierter: Wie kann ich es anstellen, dass ich alle Einträge, die er unter outRec.addressEntry.GetExchangeUser.department findet, in einer Listbox und/oder COmbobox gelistet bekomme?
Könnte mich da jemand unterstützen bei dem Vorhaben?
Lieben Dank

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Exchange Daten einer Abt. in Listbox
03.10.2022 10:36:12
Erni
Und mit dem Adressbuch funktioniert sowas nicht ? Dachte, dass man über die Ergebnisse einfach eine Schleife laufen lässt und damit die einzelneen Felder (brauche ja nur wenige) ausliest ? die einzelwerte bekomme ich ja auch, allerdings eben nur von einem bislang! deswegen dachte ich, die abteilung ca 20 mitarbeiter in ein array einzulesen, geht das nicht irgendwie ?
Anzeige
AW: Exchange Daten einer Abt. in Listbox
03.10.2022 10:43:19
Yal
Jein. Es geht natürlich über den Adressbuch, aber Du müsstest eine Anfrage pro Mitarbeiter anstoßen. Mit Active Directory kannst Du den Vorgesetzten als Abfragefilter eingeben und sofort alle Untergeordneten bekommen. Es ist ja einen "directory", spricht hierarschich organisiert.
Ich habe einen Code dafür, bin aber am Wochenende nicht am Rechner. Es basiert auf einer adodb-Abfrage (Links 1) mit der passenden Filter (Links 2).
VG
Yal
AW: Exchange Daten einer Abt. in Listbox
03.10.2022 11:29:39
Erni
Es eilt ja nicht... Wenn Du dazu kommst würde ich mich freuen, wenn Du mir Hilfestellung leisten kannst.
AW: Exchange Daten einer Abt. in Listbox
04.10.2022 18:34:09
Yal
Hallo Erni,
basierend auf dem Code vom ersten Link. Leicht nachbearbeitet.
Du musst im Test-Procedure den xxx gegen dein Username austauschen.

Sub ADQuery_test()
Dim Coll
Dim Manager
Dim Elt
Set Coll = GetAdsProp("(&(samaccountname=xxx))", "manager")
If Coll Is Nothing Then MsgBox "kein Ergebnis": Exit Sub
Manager = Coll(1)
Set Coll = Nothing
Set Coll = GetAdsProp("(&(manager=" & Manager & "))", "displayname, sn, givenname, mail")
For Each Elt In Coll
Debug.Print Elt
Next
End Sub
Function GetAdsProp(ByVal searchString As String, returnFields As String) As Collection
'This function originally taken from here: https://www.remkoweijnen.nl/blog/2007/11/01/query-active-directory-from-excel/
'the function returns a collection of comma-delmited strings containing the requested return fields.
' Get the domain string ("dc=domain, dc=local")
Dim strDomain As String
Dim valueSet As Collection
Set valueSet = New Collection
strDomain = GetObject("LDAP://rootDSE").Get("defaultNamingContext")
Dim DC
Dim GC
For Each DC In Split(strDomain, ",")
GC = GC & "." & Trim(DC)
Next
GC = Mid(GC, 2) 'erster Punkt Raus
GC = ""
' ADODB Connection to AD
Dim objConnection As ADODB.Connection
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"
' Connection
Dim objCommand As ADODB.Command
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
' Search the AD recursively, starting at root of the domain
'intent here is to be passed the entire LDAP search string, to enable different types of queries using the one function
'return fields should be a comma delimited list of valid LDAP fields
'Search string should be in the LDAP query format: http://www.selfadsi.org/ldap-filter.htm
objCommand.CommandText = GC & ";" & searchString & ";" & returnFields & ";subtree"
' RecordSet
Dim objRecordSet As ADODB.Recordset
Set objRecordSet = objCommand.Execute
If objRecordSet.RecordCount = 0 Then
valueSet.Add "Group Members or Group not found"  ' no records returned
Else
objRecordSet.MoveFirst
Do While objRecordSet.EOF = False 'for every record
valueSet.Add DelimitItems(objRecordSet) 'take the record, pass it to delimit items, which pulls each ofthe fields into a single comma delimited string
objRecordSet.MoveNext
Loop
End If
' Close connection
objConnection.Close
' Cleanup
Set objRecordSet = Nothing
Set objCommand = Nothing
Set objConnection = Nothing
Set GetAdsProp = valueSet
Set valueSet = Nothing
End Function
Function DelimitItems(record As ADODB.Recordset) As String
'this function takes a ADODB record (which is similar to a collection) and returns a comma delimited
'string containing all the fields for that record
Dim x As Integer
Dim myString As String
Dim item As Variant
x = 1
For Each item In record.Fields
If (x = 1) And item  "" Then
myString = item
x = x + 1
Else
If item  "" Then
myString = myString & ", " & item
End If
End If
Next
DelimitItems = myString
End Function
VG
Yal
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige