Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2010, 13:28   #1
sirius24
Пользователь
 
Регистрация: 17.03.2010
Сообщений: 10
По умолчанию AD и Excel

Доброго времени суток!

Очень нужно экспортировать данные из AD в Excel. Нашел один работающий скрипт, только есть одна проблема: выводит только одну группу, к которой принадлежит юзер. Подскажите, пожалуйста, как сделать, чтобы выводил все группы, к которым подключен пользователь.
Код:
Public Sub importad()

    Const ADS_SCOPE_SUBTREE = 6 ' глубина анализа Active Directory
    
    Dim attr(20, 5): ac = 0: mailat = -1 ' определение значений
    
    ' Массив запрашиваемых атрибутов. Порядок определяется порядком в коде благодаря
    ' увеличению индекса в каждой строке.
    ' Для атрибута mail задается дополнительная переменная-индекс для фильтра в дальнейшем.
    
    attr(ac, 1) = "Полное имя": attr(ac, 2) = "cn": ac = ac + 1
    attr(ac, 1) = "Отображаемое имя": attr(ac, 2) = "displayname": ac = ac + 1
    attr(ac, 1) = "Фамилия": attr(ac, 2) = "sn": ac = ac + 1
    attr(ac, 1) = "Имя": attr(ac, 2) = "givenName": ac = ac + 1
    attr(ac, 1) = "группа": attr(ac, 2) = "memberof": ac = ac + 1
    attr(ac, 1) = "Телефон": attr(ac, 2) = "telephoneNumber": ac = ac + 1
    attr(ac, 1) = "E-mail": attr(ac, 2) = "mail": mailat = ac: ac = ac + 1 ' mailat - атрибут элемента E-mail
    attr(ac, 1) = "Alias": attr(ac, 2) = "samaccountname": ac = ac + 1
    
    For i = 0 To ac ' Заполнение заголовка
        Cells(2, i + 1).Value = attr(i, 1)
    Next i
    
    ' Создание подключения
    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand = CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    
    Set objCommand.ActiveConnection = objConnection
    objCommand.Properties("Page Size") = 100 ' размер страницы
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE ' глубина анализа
    
    ' формирование строки атрибутов
    atts = ""
    For i = 0 To ac
        atts = atts & attr(i, 2) & ","
    Next i
    atts = Mid(atts, 1, Len(atts) - 2) ' перечень запрашиваемых атрибутов
    
    ' определение домена текущего пользователя
   ' domain = Environ("USERDNSDOMAIN")
   ' da = Split(domain, ".")
   ' st = "dc=" & da(UBound(da) - 1) & ",dc=" & da(UBound(da)) ' путь подключения к LDAP
    
    objCommand.CommandText = _
        "SELECT " & atts & " FROM " _
            & "'LDAP://****.local/OU=******,DC=****,DC=local' WHERE " _
                & "objectCategory='user'"
    Set objRecordSet = objCommand.Execute ' выполнение запроса
    
    ' начало заполнения таблицы Excel
    
    objRecordSet.MoveFirst ' первая запись
    
    x = 3 ' первая строка для импорта
    
    Do Until objRecordSet.EOF ' пока не закончатся записи
    
        If objRecordSet.Fields(attr(mailat, 2)) <> "" Or Cells(1, 1) = False Then ' проверка пустой почты
            For i = 0 To ac - 1
                Cells(x, i + 1).Value = objRecordSet.Fields(attr(i, 2)).Value
            Next i
            x = x + 1
        End If
        objRecordSet.MoveNext
        
    Loop
    

End Sub

Последний раз редактировалось sirius24; 26.03.2010 в 13:45.
sirius24 вне форума Ответить с цитированием
Старый 26.03.2010, 21:37   #2
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте sirius24.
SQL конструкция запроса, получает данные только базовой группы к которой принадлежит пользователь. Для получения списка групп членом которой является пользователь, подобная конструкция даже с переделанным запросом - не самое удачное решение, т.к. существующее отношение (каждый пользователь может быть членом многих групп), не корректно будет отображать запрашиваемые данные.

помочь Вам в создании верного решения смогу оказать не раньше вторника (30/04/2010), ввиду отсутствия в домашних условиях AD.

встречный вопрос: откуда у Вас этот VBA код, изобилующий бесполезными нагромождениями

Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 29.03.2010, 09:41   #3
sirius24
Пользователь
 
Регистрация: 17.03.2010
Сообщений: 10
По умолчанию

Здравствуйте, Евгений!

Буду очень надеяться на Вашу помощь! Запрос нашел в интернете
sirius24 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как при импорте из Excel в delphi узнать сколько заполненных строк в книге Excel?чтобы организовать цикл betirsolt БД в Delphi 1 17.01.2010 18:51
Как запретить запуск программы на VBA Excel 2003 в Excel 2007 kovalevskivf Microsoft Office Excel 2 15.05.2009 16:47
очень громоздкие финансовые модели в Excel, а Excel не тянет Ragazza Microsoft Office Excel 7 03.10.2007 20:08
Формирование из excel в ASCII, у меня он формирует по одному клиенту а в Excel нескол Askat Общие вопросы Delphi 0 18.07.2007 06:28
Как вытащить данные из Excel в бд dephi, а потом (после работы с данными) сформировать новый файл excel. Геля БД в Delphi 1 10.04.2007 15:11