2017-02-16 37 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:超出範圍的索引

on arrList(i) = arrMemberDN

我該如何填寫我的數組arrList價值從arrMemberDN

+0

您需要爲陣列設置尺寸。例如。 'redim' –

+0

那是因爲你沒有設置arrList數組的大小,它只有一個點。您需要將數組重新設置爲objGroups的大小。 –

回答

5

首先你必須爲你的數組創建維度,這裏是一維數組。

然後你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