09. juni 2010 - 12:50 Der er 8 kommentarer og
1 løsning

Hente oplysninger fra Active Directory ind i en Wordskabelon?

Hej,
Som identifikation af hvilken bruger det er der har udfyldt og gemt et worddokument på et fællesdrev, har jeg brug for at fx username fra AD'et bliver hentet ind i fx et bogmærke. Hvordan gør jeg det i VBA?
/Anne-Dorthe
Avatar billede andera Novice
09. juni 2010 - 13:53 #1
10. juni 2010 - 21:42 #2
Tror på at det er 'solid' kode, men jeg skal nok have det skåret lidt mere ud i pap :-)
Jeg kopierede denne kode:

-----------------------------------------------------------------
Private Function queryAD()

Dim rs As Object
Dim uName As String

Dim extensions() As Variant
Dim i As Integer

Public Const adOpenStatic    As Integer = 3
Public Const adLockReadOnly  As Integer = 1
Public Const adCmdUnspecified As Integer = -1

    'Instantiate recordset
    Set rs = CreateObject("ADODB.Recordset")
   
    'Open LDAP recordset
    strSQL = "SELECT userPrincipalName, sAMAccountName, mail, telephoneNumber, otherTelephone " & _
            "FROM 'LDAP://DC=xxxxxx,DC=pri'" & _
            "WHERE objectClass='user' AND objectCategory='Person'"
   
    rs.Open strSQL, "Provider=ADSDSOObject;", adOpenStatic, adLockReadOnly, adCmdUnspecified
   
    'Iterate through recordset
    If Not rs.EOF And Not rs.BOF Then
           
            'If userPrincipalName is null, then uName = "@"
            uName = Nz(rs.fields("userPrincipalName"), "@")
            'Trim everything after, and including, the "@" symbol from uName
            uName = Left(uName, InStr(1, uName, "@") - 1)
            'If uName is blank then use sAMAccountName
            uName = IIf(uName = "", Nz(rs.fields("sAMAccountName"), ""), uName)
           
            'Assign username value to textbox
            Me.txtNTUsername.Value = uName
           
            'Assign email and telephone to textboxes
            Me.txtEmail.Value = Nz(RTrim(rs.fields("mail")), "")
            Me.txtTelephone.Value = Nz(RTrim(rs.fields("telephoneNumber")), "")
           
            'otherTelephone accepts multiple values; and as such it has to be treated differently
            'i.e. as an array
           
            If IsNull(rs.fields("otherTelephone").Value) Then
                Me.txtMobExtension.Value = ""
            Else
                'Assign recordset value to our array variant
                extensions() = rs.fields("otherTelephone").Value
               
                'If there is more than one value in the array
                If UBound(extensions) > 0 Then
                    'Iterate through and append each value to create a semi-colon separated string
                    For i = 0 To UBound(extensions)
                        Me.txtTelExtension.Value = Me.txtTelExtension.Value & extensions(i) & "; "
                    Next i
                Else
                    'Single value
                    Me.txtTelExtension.Value = extensions(0)
                End If
            End If
       
    End If
   
    'Close connection and tidy up
    rs.Close
    Set rs = Nothing
   
End Function
-----------------------------------------------------------------

men den giver hele tiden fejl - det første den siger er syntax error til linien 'Public Const adOpenStatic As Integer = 3'. Det lader til at hjælpe at jeg retter det til 'Const adOpenStatic As Integer = 3', men så siger den 'Sub or function not defined' - og jeg er ikke velbevandret nok i VBA til at regne ud hvad det er jeg skal ændre for at få det til at virke hos mig.

/Anne-Dorthe
Avatar billede andera Novice
11. juni 2010 - 01:34 #3
Kære Anne-Dorthe,

Prøv at køre disse 2 linier:

Set WSHNetwork = CreateObject("WScript.Network")
MsgBox WSHNetwork.UserName

Og se om du får det du gerne vil have.
13. juni 2010 - 21:10 #4
Det gør jeg :-)
Kan du hjælpe mig med at få det ind i et bogmærke? Jeg har prøvet med:
------------------------------------------------------------------
Set WSHNetwork = CreateObject("WScript.Network")

      Selection.GoTo what:=wdGoToBookmark, Name:="AD"
      Selection.TypeText WSHNetwork.UserName
----------------------------------------------------------------
men så siger den "Runtime error 5099: Du kan kun specificere en enkelt linje, fodnote, slutnote, kommentar eller felt ad gangen".

Og kan jeg få det fulde navn?
/Anne-Dorthe
Avatar billede andera Novice
17. juni 2010 - 11:51 #5
Nej det ser rigtig mærkeligt ud,
men til gengæld har jeg fundet nogle
linier som kan hjælpe med Navnet:

    Dim objAdSys, objUser
    Set objAdSys = CreateObject("ADSystemInfo")
    Set objUser = GetObject("LDAP://" & objAdSys.UserName)


    MsgBox (objUser.Get("cn"))
    MsgBox (objUser.Get("displayName"))
28. juni 2010 - 14:03 #6
Hej andera
Undskyld min lange responstid.
Linierne med navnet virker. Tak for hjælpen.

Mangler dog stadig hjælp til at få det sat ind i et bogmærke, så hvis du eller andre støder på noget, så .... :-)

Hilsen Anne-Dorthe
Avatar billede andera Novice
28. juni 2010 - 22:49 #7
Kan det tænkes at du ikke har bogmærket AD ?
Ellers synes jeg det set rigtigt ud.
Jeg har lige lavet en makro med goto bogmærket olsen
og det virkede.


selection.goto what:=wdgotobookmark, name:="olsen"
Avatar billede andera Novice
29. juni 2010 - 01:36 #8
hvad med lige at vise din kode her
03. juli 2010 - 19:02 #9
Har fået det til at virke.  Tak igen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester