27.11.2022, 10:55 
		
	
	
		Moin moin,
ich habe ein Makro, welches das LDAP-Verzeichnis "anzapft" und eine Liste mit Namen und Vornamen abfragt und dann weitere Infos wie E-Mail-Adresse ergänzt. Das klappt auch soweit ganz gut. Allerdings kommt es nicht selten vor, dass es mehrere Personen mit identischem Vor- und Nachnamen gibt. Ich möchte die Prozedur dann an der Stelle unterbrechen und z.B. in einer Userform die entsprechenden Infos darstellen, sodass der User sich die gesuchte Person aussuchen kann. Danach soll die Prozedur fortgeführt werden.
Da ich das Makro nicht selbst gebaut habe und es entsprechend auch nicht vollends verstehe, was da passiert, weiß ich nicht, an welcher Stelle ich ansetzen könnte. Eine Userform basteln dürfte ich hinbekommen - das dauert bei mir allerdings ein wenig :).
Wäre super, wenn mir wer auf die Sprünge helfen könnte.
Das Makro sieht wie folgt aus:
Danke und Gruß
	
	
	
	
ich habe ein Makro, welches das LDAP-Verzeichnis "anzapft" und eine Liste mit Namen und Vornamen abfragt und dann weitere Infos wie E-Mail-Adresse ergänzt. Das klappt auch soweit ganz gut. Allerdings kommt es nicht selten vor, dass es mehrere Personen mit identischem Vor- und Nachnamen gibt. Ich möchte die Prozedur dann an der Stelle unterbrechen und z.B. in einer Userform die entsprechenden Infos darstellen, sodass der User sich die gesuchte Person aussuchen kann. Danach soll die Prozedur fortgeführt werden.
Da ich das Makro nicht selbst gebaut habe und es entsprechend auch nicht vollends verstehe, was da passiert, weiß ich nicht, an welcher Stelle ich ansetzen könnte. Eine Userform basteln dürfte ich hinbekommen - das dauert bei mir allerdings ein wenig :).
Wäre super, wenn mir wer auf die Sprünge helfen könnte.
Das Makro sieht wie folgt aus:
Code:
Sub GetAccountInfo()
    On Error Resume Next
    ' ad properties to extract for users
    arrProps = Array("givenName", "mail", "samAccountName", "department", "memberOf")
    ' column headers matching array positions of 'arrProps'
    arrColumnHeaders = Array("givenName", "E-Mail", "samAccountName", "department")
    ' working on current sheet
    With ThisWorkbook.Sheets("Mitarbeiter")
        ' for each used cell in column C2:I(n)
        For Each cell In .Range("A6:A" & .Cells(Rows.Count, "A").End(xlUp).Row)
            ' if value is not empty
            If cell.Value <> "" Then
                ' search user in ad
                Set result = FindAccount(cell.Value, cell.Offset(0, 1).Value)
                ' if user found  ...
                If Not result Is Nothing Then
                    For i = 0 To UBound(arrProps)
                        cell.Offset(0, i + 1).Value = result.Get(arrProps(i))
                    Next
                Else    ' user not found
                    ' write info to next cell
                    cell.Offset(0, 1).Value = "Mitarbeiter nicht gefunden"
                End If
            End If
        Next
    End With
End Sub
Function FindAccount(strUserName, strUserVorname)
    On Error Resume Next
    Dim adoCommand, adoConnection
    Dim varBaseDN, varFilter
    Dim objRootDSE, varDNSDomain, strQuery, adoRecordset
    Set adoCommand = CreateObject("ADODB.Command")
    Set adoConnection = CreateObject("ADODB.Connection")
    adoConnection.Provider = "ADsDSOObject"
    adoConnection.Open "Active Directory Provider"
    Set adoCommand.ActiveConnection = adoConnection
    
    ' Search entire Active Directory domain.
    Set objRootDSE = GetObject("LDAP://RootDSE")
    
    varDNSDomain = objRootDSE.Get("defaultNamingContext")
    varBaseDN = "<LDAP://" & varDNSDomain & ">"
    
    ' Filter for user objects.
    varFilter = "(&(objectCategory=person)(objectClass=user)(sn=" & strUserName & ")(givenName=" & strUserVorname & "))"
    
    ' Construct the LDAP syntax query.
    adoCommand.CommandText = varBaseDN & ";" & varFilter & ";ADSPath;Subtree"
    adoCommand.Properties("Page Size") = 2
    adoCommand.Properties("Timeout") = 20
    adoCommand.Properties("Cache Results") = False
    Set adoRecordset = adoCommand.Execute
    adoRecordset.MoveFirst
    If adoRecordset.RecordCount > 0 Then
        Set FindAccount = GetObject(adoRecordset("ADSPath"))
    Else
        Set FindAccount = Nothing
    End If
    
    adoRecordset.Close
    adoConnection.Close
End FunctionDanke und Gruß

 
 

 

 
	
![[-]](https://www.clever-excel-forum.de/images/collapse.png)