2017-08-02 32 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