PDA

Показать полную графическую версию : Word получение данных из AD


mcintosh55
14-12-2018, 09:51
Добрый день, есть скрипт на VBA для excel получение данных из AD, подскажите как такое-же можно провернуть для word.

Function GetADInfo(ByVal SearchField, ByVal SearchString, ByVal ReturnField)

Dim adoCommand, strDomain, objConnection

strDomain = "dc=Ваш_домен,dc=local"

Set objConnection = CreateObject("ADODB.Connection")

objConnection.Open "Provider=ADsDSOObject;"

Set adoCommand = CreateObject("ADODB.Command")

adoCommand.ActiveConnection = objConnection

adoCommand.CommandText = _
"<LDAP://" & strDomain & ">;(&(objectCategory=" & "User" & ")" & _
"(" & SearchField & "=" & SearchString & "));" & SearchField & "," & ReturnField & ";subtree"

Dim objRecordSet

Set objRecordSet = adoCommand.Execute

If objRecordSet.RecordCount = 0 Then

GetADInfo = "not found"

Else

GetADInfo = objRecordSet.Fields(ReturnField)
End If

objConnection.Close

Set objRecordSet = Nothing

Set objCommand = Nothing

Set objConnection = Nothing

End Function

Iska
14-12-2018, 12:53
mcintosh55, я не вижу в приведённом коде ничего специфичного ни для Excel, ни даже для VBA в целом.

mcintosh55
14-12-2018, 13:09
я не вижу в приведённом коде ничего специфичного ни для Excel, ни даже для VBA в целом. »
Я так понимаю надо сделать так:
1) написать функцию при запуске документа которая определит имя пользователя и положит данные в переменную А
2) дальше просто вызывать функцию выше и подсовываем ей переменную А и туда куда надо вывести
Я так понимаю как описано выше надо сделать?

Iska
14-12-2018, 13:25
Я так понимаю надо сделать так: »
Это Вы о чём сейчас? И как сие связано с:
есть скрипт на VBA для excel получение данных из AD, подскажите как такое-же можно провернуть для word. »
?!

Опишите Вашу задачу.

mcintosh55
14-12-2018, 13:34
есть форма в формате word при открытие документа в определенные поля нужно ввести данные из AD пользователя которые работает за компьютером

Iska
14-12-2018, 14:24
Ага, примерно ясно.

Приведённый выше код функции GetADInfo, возвращающий либо строку "not found", либо объект типа Field, может быть непосредственно использован в любом приложении Microsoft Office, либо в WSH без каких-либо переделок.

Если Вас интересуют данные текущего пользователя, то можно попробовать сделать и проще, наподобие: User Information - VBScript - SS64.com (https://ss64.com/vb/syntax-userinfo.html), вместо того, чтобы лопатить запросом всю иерархическую базу AD.

mcintosh55
14-12-2018, 16:28
А еще подскажите как связать "поле со списком" с полем "форматированный текста". Т.е. к примеру из "поле со списком" выбираю должность "директор" а в поле "форматированный текста" появляется фамилия

Iska
14-12-2018, 17:27
Навряд ли подскажу — пробовать не на чем: у меня Microsoft Office 2003, а в нём была совершенно иная модель форм (если речь именно про формы в документе).

В моей версии нет поля вида «форматированный текст», есть просто текстовое поле. И всё, что можно сделать — написать макрос, наподобие:
Option Explicit

Sub Sample()
Me.FormFields.Item("ТекстовоеПоле1").Result = Me.FormFields.Item("ПолеСоСписком1").Result
End Sub

и привязать его к полю «Поле со списком» («ПолеСоСписком1») следующим образом:
https://i.imgur.com/2nhDUJy.png
В Вашей версии в новой модели форм должно быть намного больше возможностей в этом плане.

mcintosh55
14-12-2018, 18:52
если сможете файл как пример скиньте а то Я так не смог сделать

Iska
15-12-2018, 01:26
Держите (https://dropmefiles.com/8S57i) (ссылка будет доступна 7 дней). Но лучше пользуйте новую модель, которая доступна в Вашей версии Microsoft Office.




© OSzone.net 2001-2012