我有一些代碼用於獲取用戶的管理器 - 我最初編寫了SharePoint網站的代碼,但最近被要求使用VBA編寫代碼。返回LDAP管理器的displayName
Const SearchField = "DisplayName"
Const ReturnField = "manager"
Public Function MLookup(ByVal SearchString As String) As String
Application.ScreenUpdating = False
Dim strDomain
strDomain = GetObject("LDAP://rootDSE").Get("defaultNamingContext")
Dim objConnection As ADODB.Connection
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"
Dim objCommand As ADODB.Command
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
objCommand.CommandText = _
"<LDAP://" & strDomain & ">;(&(objectCategory=User)" & _
"(" & SearchField & "=" & SearchString & "));" & SearchField & "," & ReturnField & ";subtree"
Dim objRecordSet As ADODB.Recordset
Set objRecordSet = objCommand.Execute
If objRecordSet.RecordCount = 0 Then
MLookup = "Not Found"
Else
objMngr = objRecordSet.Fields(ReturnField)
objMngr = Mid(objMngr, 4, InStr(1, objMngr, ",OU"))
objMngr = Replace(objMngr, "\,", ",")
objMngr = Left(objMngr, Len(objMngr) - 12)
MLookup = Trim(objMngr)
End If
objConnection.Close
Set objRecordSet = Nothing
Set objCommand = Nothing
Set objConnection = Nothing
Application.ScreenUpdating = True
End Function
此代碼工作正常 - 運行速度有點慢,因爲我在家工作但它完成了工作。儘管我現在遇到了麻煩。經理字段返回經理上的用戶字符串,但是刺痛是使用專有名稱構建的 - 對於女士來說,這意味着他們的孃家姓。這些數據在報告中使用,並且由於數據在他們看來是不正確的,所以有些羽化。我想知道的是,是否有辦法將管理器的返回字符串修改爲該人員的顯示名稱,而不是將該名稱解析爲經理字段?或者是我唯一的解決方案來創建第二個返回顯示名稱的函數(這會使我的響應時間增加一倍,並且可能會超過5000條記錄)?
謝謝 - 這是一些很好的建議。我的代碼目前被編寫成用作Excel單元格中的等式,並且只有在運行報表的人願意更改時纔會更改。 – AxGryndr