Tuhle funkci používám při zjišťování uživatele celý kód xla je tento:
Function GetEnvirons(ByVal ArgumentName As String) As String
On Error GoTo Env_Err
GetEnvirons = Environ(ArgumentName)
Exit Function
Env_Err:
GetEnvirons = ""
End Function
Function GetAdsProp(ByVal SearchField As String, ByVal ReturnField As String) As String
' Get the domain string ("dc=domain, dc=local")
Dim strDomain As String
strDomain = GetObject("LDAP://rootDSE").Get("defaultNamingContext")
' 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
' Get the logged user
Dim SearchUser As String
SearchUser = GetEnvirons("USERNAME")
' Search the AD recursively, starting at root of the domain
objCommand.CommandText = _
"<LDAP://" & strDomain & ">;(&(objectCategory=User)" & _
"(" & SearchField & "=" & SearchUser & "));" & SearchField & "," & ReturnField & ";subtree"
' RecordSet
Dim objRecordSet As ADODB.Recordset
Set objRecordSet = objCommand.Execute
If objRecordSet.RecordCount = 0 Then
GetAdsProp = "not found" ' no records returned
Else
GetAdsProp = objRecordSet.Fields(ReturnField) ' return value
End If
' Close connection
objConnection.Close
' Cleanup
Set objRecordSet = Nothing
Set objCommand = Nothing
Set objConnection = Nothing
End Function
použití je takto:
=GetAdsprop(“cn”; A2; “samAccountName”)
Když vytvořím šablonu, do které dám tento vzorec, tak po otevření jiným uživatelem doplní Excel ke vzorci absolutní cestu k doplňku tvůrce šablony. Všichni uživatelé mají doplněk nainstalovaný a museli by si každou položku s tímto vzorcem upravit, aby byla bez cesty a uložit jako svou šablonu. To ale ztrácí to kouzlo, kterého chci docílit. A to je, že uživatel klepne na excelovou šablonu a ve vybraných buňkách bude mít napsané informace o sobě načtené z Active directory.
citovat