beidermachtvongreyscull
Goto Top

Word VBA - LDAP-Abfrage nach otherfacsimileTelephoneNumber - Was kommt da denn zurück?

Moin Kollegen,

ich frage mittels eines VBA-UserForms in Word bestimmte Informationen im AD ab. Zusätzlich muss ich unterscheiden, wenn ein Nutzer neben der eigentlichen Faxnummer noch eine weitere haben könnte und hier kommt es zum Problem.

Ich frage dazu das LDAP-Attribut otherfacsimileTelephoneNumber ab. Der Code funktioniert normal, wenn es leer ist. Aber wenn ich eine Faxnummer dort hinterlegt habe, knallt es sofort und zwar immer mit der Meldung "Typen unverträglich".

Aus der Schema-Dokumentation weiß ich, dass es sich um ein Array handeln muss, was zurückgeliefert wird.
Und daraus brauche ich nur Index-0 als String.

Ich kriege das einfach nicht hin.

Einfangen in ein Array klappt nicht.
Einfangen in eine Variant-Variable und dann mittels CStr-Konversion klappt auch nicht.
Nichtmal ein simples MsgBox funktioniert.

Ich fürchte, ich verstehe nicht, was da zurückkommt.
Kann mir da jemand von Euch helfen?

Hier mal der Script-Code:

Dim objRoot, strDomain, objConn, objComm, objRecordset
Dim sFilter, sAttribs, sDepth, sBase, sQuery
     
Set objRoot = GetObject("LDAP://RootDSE")  
strDomain = objRoot.Get("DefaultNamingContext")  
Set objConn = CreateObject("ADODB.Connection")  
Set objComm = CreateObject("ADODB.Command")  
     
sFilter = "(&(objectClass=person)(sn=" & strNachname & ")(givenName=" & strVorname & "))"  
sAttribs = "telephoneNumber,facsimileTelephoneNumber,otherfacsimileTelephoneNumber,mail"  
sDepth = "SubTree"  
sBase = "<LDAP://" & strDomain & ">"  
sQuery = sBase & ";" & sFilter & ";" & sAttribs & ";" & sDepth  
     
objConn.Open "Data Source=Active Directory Provider;Provider=ADsDSOObject"  
Set objComm.ActiveConnection = objConn
objComm.Properties("Page Size") = 10000  
objComm.CommandText = sQuery
Set objRecordset = objComm.Execute
     
Dim VariantVal As Variant
Dim StringVal(2) As String
     
Do Until objRecordset.EOF
    Me.Label16.Caption = strVorname & " " & strNachname  
    Me.Label17.Caption = Nz(objRecordset("telephoneNumber"), "nicht gefunden")  
    StringVal(1) = CStr(Nz(objRecordset("otherfacsimileTelephoneNumber"), ""))  
    MsgBox StringVal(1)
    
    If Nz(StringVal(1), "") = "" Then  
        Me.Label18.Caption = Nz(objRecordset("facsimiletelephoneNumber"), "nicht gefunden")  
        Else
            a = MsgBox("Der Benutzerdatensatz enthält die alternative Fax-Nummer " & objRecordset("otherfacsimileTelephoneNumber") & ". Soll diese verwendet werden, statt der regulären?", vbYesNo)  
            If a = vbNo Then
                Me.Label18.Caption = Nz(objRecordset("facsimiletelephoneNumber"), "nicht gefunden")  
                Else
                Me.Label18.Caption = Nz(objRecordset("otherfacsimiletelephoneNumber"), "nicht gefunden")  
            End If
    End If
    objRecordset.MoveNext
Loop

Function Nz(strItem, strReturn)
    If IsNull(strItem) Then
        Nz = strReturn
        Else
            Nz = strItem
    End If
End Function

Vielleicht ist es nur eine Kleinigkeit und ich sehe den Wald vor lauter Bäumen nicht.

Danke im Vorraus.

Viele Grüße
bdmvg

Content-ID: 2555760032

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

Printed on: December 12, 2024 at 17:12 o'clock

colinardo
Solution colinardo Apr 21, 2022 updated at 09:01:20 (UTC)
Goto Top
Servus bdmvg,
Vielleicht ist es nur eine Kleinigkeit und ich sehe den Wald vor lauter Bäumen nicht.
Dann hole ich mal die Motorsäge face-smile.
for each number in objRecordset("otherfacsimileTelephoneNumber").value  
    msgbox number
Next
Grüße Uwe
beidermachtvongreyscull
beidermachtvongreyscull Apr 21, 2022 at 09:01:19 (UTC)
Goto Top
Ich danke Dir Uwe.
Funktioniert.

Grüße
Andreas