2017-02-16 1 views
1

Мой код определяется следующим образом:Заполните значения из Active Directory в массив в VBA

Dim objGroups As Object 
Dim arrMemberDN As Variant 
Dim arrList() As Variant 
Dim i As Integer 

Set objGroups = GetObject("LDAP://" & strGroupDN) 

For Each arrMemberDN In objGroups.member 
    arrMemberDN = Mid(arrMemberDN, 4, 7) 
    arrList(i) = arrMemberDN 
    i = i + 1 
Next arrMemberDN 

Но я всегда получаю ошибки во время выполнения

9: Индекс вне диапазона

на arrList(i) = arrMemberDN

Как заполнить мой массив arrList со значением от arrMemberDN?

+0

Вам необходимо установить размеры для вашего массива. Например. 'redim' –

+0

Это потому, что вы не установили размер для массива arrList, у него есть только одно место. Вам необходимо перевести массив в размер objGroups. –

ответ

5

Сначала вам нужно создать размеры для вашего массива, вот он для массива 1D.

Затем вы получите Redim Preserve, чтобы сохранить содержимое, которое у вас было в нем.

ПРИМЕЧАНИЕ: Redim Preserve может использоваться только для изменения измерения LAST!

Dim objGroups As Object 
Dim arrMemberDN As Variant 
Dim arrList() As Variant 
ReDim arrList(1 To 1) 


Set objGroups = GetObject("LDAP://" & strGroupDN) 

For Each arrMemberDN In objGroups.member 
    arrMemberDN = Mid(arrMemberDN, 4, 7) 
    arrList(UBound(arrList)) = arrMemberDN 
    ReDim Preserve arrList(LBound(arrList) To UBound(arrList) + 1) 
Next arrMemberDN 
ReDim Preserve arrList(LBound(arrList) To UBound(arrList) - 1) 
+0

Я так благодарен ... Большое спасибо! Это приятное решение :) – yuro

1

Чтобы добавить к предложению @ R3uK. Вы были близки, если вы можете получить количество объектов в objGroups, прежде чем вы начнете цикл, вы можете установить пределы arrList только один раз, что будет быстрее.

Dim objGroups As Object 
Dim arrMemberDN As Variant 
Dim arrList() As Variant 
Dim i As Integer 

Set objGroups = GetObject("LDAP://" & strGroupDN) 
ReDim arrList(1 to 'count of items in objGroups) 

For Each arrMemberDN In objGroups.member 
    i = i + 1   
    arrMemberDN = Mid(arrMemberDN, 4, 7) 
    arrList(i) = arrMemberDN 
Next arrMemberDN 
+0

Как вы считаете переменную объекта со значениями AD? – yuro

+0

Ну, вы использовали 'objGroups.member', чтобы получить участников, возможно,' objeGroups.member.count' посчитал бы их? – CallumDA

+0

Нет, это не так. Я получаю сообщение об ошибке, что этот метод не определен. – yuro

Смежные вопросы