2017-08-02 58 views
0

我通過包含分割字符串數組試圖循環,通過此行來完成:
repHolder() = Split(rep, ",")我的陣列不兼容嗎?

也就是說,是所有優秀和良好,但是當我通過for遍歷這個repHolder()陣列嘗試循環,我每次遇到一個subscript out of range錯誤。

這對我來說沒有意義。當我遍歷數組時,它每次都會在第一個元素上失敗;這一行:

If repHolder(j) = counter Then

我試圖設置j爲0和1,它們都未能對環路的第一序列。這向我暗示,因爲該數組沒有定義的大小;我不能以這種方式循環,但對我來說這仍然沒有什麼意義,因爲它仍然充滿了元素。

這裏是什麼,我試圖做整個代碼塊:

Dim repHolder() As String 
Dim strHolder() As String 
Dim counter As Variant 
Dim j As Integer 


For Each rep In repNames() 

    repHolder() = Split(rep, ",") 

Next rep 



For Each rangeCell In repComboRange 
k = 1 

Do 

If rangeCell.Value = repCombos(k) Then 'At this point, if rangecell = repcombos(k) 

Range(rangeCell, rangeCell.End(xlToRight)).Copy 
strHolder() = Split(rangeCell.Value, "/") 

    For Each counter In strHolder() 
     Stop 
     For j = 1 To 17 

      If repHolder(j) = counter Then 

回答

1

您通過repNames()循環,並通過分割設置這個新的數組(再次爲每個repName元素一遍又一遍......)

For Each rep In repNames()  
    repHolder() = Split(rep, ",")  
Next rep 

這個循環的每個迭代復位repHolder()rep元素下探任何值已在先前的迭代數組中的只是設置的分裂。所以一旦完成,只有RepNames()的最後一個元素被拆分爲repHolder()陣列。

例如,如果RepNames()樣子:

Element 0: "james,linda,mahesh,bob" 
Element 1: "rajesh,sam,barb,carrie" 
Element 2: "" 

然後在這一切之後迭代您repHolder陣列將是空的,因爲沒有什麼最後的元素。

在你的For Each rangeCell In repComboRange行上貼一個斷點(F9),並在VBE中查看你的Locals窗格。查看當時存儲在您的repHolder()陣列中的值。我懷疑那裏沒有任何東西。

其他古怪的是,你們是循環1至17 repHolder()將是一個基於0陣列,這樣應該是0到16,但......即使那是扯淡,因爲這真的只能是有意義的對每個循環(或使用uBound(repHolder)來確定循環次數:

For Each counter In strHolder() 
    Stop 
    For each repHolderElem in repHolder 
     If repHolderElem = counter Then 
     .... 
    Next repHolderElem 
+0

謝謝,我不知道我不斷刪除數組中的前一個元素 – Matthew