Vba 运行时错误';9';子填充

Vba 运行时错误';9';子填充,vba,excel,Vba,Excel,我发现我在网上出错了 entries(pos) = oldEntry 在 如果newEntry-oldEntry那么 条目(pos)=旧条目 旧条目=新条目 位置=位置+1 如果结束 它表示下标超出范围 完整代码: Sub FillItUp() Dim lastRow As Long, lastCol As Long Dim oldEntry, newEntry As String Dim entries(12), toCompare

我发现我在网上出错了

entries(pos) = oldEntry

如果newEntry-oldEntry那么
条目(pos)=旧条目
旧条目=新条目
位置=位置+1
如果结束
它表示下标超出范围

完整代码:

 Sub FillItUp()
        Dim lastRow As Long, lastCol As Long
        Dim oldEntry, newEntry As String
        Dim entries(12), toCompare
        Dim pos As Integer
        lastRow = Sheets(1).Range("A65536").End(xlUp).Row
        lastCol = Sheets(1).Range("A6").CurrentRegion.columns.Count
        pos = 0

        toCompare = Array("Avocent", "Channel", "Enterprise", "Industrial", _
                          "Service", "Telecom", "Light Industrial")

        oldEntry = Sheets(1).Range("E7").Value
        entries(pos) = oldEntry

        pos = pos + 1

        For i = 7 To lastRow
            newEntry = Sheets(1).Range("E" & i).Value

            If newEntry <> oldEntry Then
                entries(pos) = oldEntry
                oldEntry = newEntry
                pos = pos + 1
            End If

            If i = lastRow Then
                entries(pos) = newEntry

            End If
Sub FillItUp()
调暗lastRow和lastCol一样长
Dim oldEntry,newEntry作为字符串
Dim条目(12),用于比较
作为整数的Dim pos
lastRow=板材(1).范围(“A65536”).结束(xlUp).行
lastCol=表(1).范围(“A6”).CurrentRegion.columns.Count
pos=0
toCompare=数组(“Avocent”、“Channel”、“Enterprise”、“Industrial”_
“服务”、“电信”、“轻工业”)
oldEntry=图纸(1).范围(“E7”).值
条目(pos)=旧条目
位置=位置+1
从i=7到最后一行
新建条目=工作表(1).范围(“E”和i).值
如果newEntry oldEntry那么
条目(pos)=旧条目
旧条目=新条目
位置=位置+1
如果结束
如果我=最后一行,那么
条目(pos)=新条目
如果结束

请检查IF语句中的数组索引。示例代码如下:

If newEntry <> oldEntry AND (pos >= 0 AND pos < 12) Then
    entries(pos) = oldEntry
    oldEntry = newEntry
    pos = pos + 1
End If
如果newEntry-oldEntry和(pos>=0和pos<12),则
条目(pos)=旧条目
旧条目=新条目
位置=位置+1
如果结束

很难判断您是否需要增加数组的初始大小(可能是因为您现在的可能值比以前多),或者您的数据是否错误(可能是因为它是要排序的,但不是),并且(如果正确的话)在数组中所占的位置是否会少于12个

下面的代码将使数组成为动态的,并在每次找到新值时增加维度

Sub FillItUp()
        Dim lastRow As Long, lastCol As Long
        Dim oldEntry, newEntry As String
        Dim entries(), toCompare
        Dim pos As Integer
        lastRow = Sheets(1).Range("A65536").End(xlUp).Row
        lastCol = Sheets(1).Range("A6").CurrentRegion.columns.Count
        pos = 0
        ReDim entries(0 To 0)

        toCompare = Array("Avocent", "Channel", "Enterprise", "Industrial", _
                          "Service", "Telecom", "Light Industrial")

        oldEntry = Sheets(1).Range("E7").Value
        entries(pos) = oldEntry

        pos = pos + 1

        For i = 7 To lastRow
            newEntry = Sheets(1).Range("E" & i).Value

            If newEntry <> oldEntry Then
                ReDim Preserve entries(0 To pos)
                entries(pos) = oldEntry
                oldEntry = newEntry
                pos = pos + 1
            End If

            If i = lastRow Then
                ReDim Preserve entries(0 To pos)
                entries(pos) = newEntry

            End If
Sub FillItUp()
调暗lastRow和lastCol一样长
Dim oldEntry,newEntry作为字符串
Dim entries(),用于比较
作为整数的Dim pos
lastRow=板材(1).范围(“A65536”).结束(xlUp).行
lastCol=表(1).范围(“A6”).CurrentRegion.columns.Count
pos=0
重拨条目(0到0)
toCompare=数组(“Avocent”、“Channel”、“Enterprise”、“Industrial”_
“服务”、“电信”、“轻工业”)
oldEntry=图纸(1).范围(“E7”).值
条目(pos)=旧条目
位置=位置+1
从i=7到最后一行
新建条目=工作表(1).范围(“E”和i).值
如果newEntry oldEntry那么
重拨保留条目(0到pos)
条目(pos)=旧条目
旧条目=新条目
位置=位置+1
如果结束
如果我=最后一行,那么
重拨保留条目(0到pos)
条目(pos)=新条目
如果结束

请注意,您将需要更改使用
条目内容的任何后续代码,以允许您现在在数组中有
0到pos
条目,而不是
0到12

当它崩溃时
pos
的值是多少?超过12条?@YowE3K我无法想象除是之外的另一个答案…@A.S.H-不,答案可能是“不”(尽管我对此表示怀疑)-我们没有看到所有的代码,因此可能会有一条稍后的语句说
pos=pos-200
@YowE3K“pos崩溃时的值是多少?”@nubcoder17-崩溃时,进入调试,将鼠标悬停在代码中的变量
pos
上,它会告诉您当前值。我们打赌答案是13(即大于12的数字),因为数组的维数是从0到12。这就引出了下一个问题:为什么数组的维数最多为12?这是否是您期望可以放入
条目
数组中的最大值数?有可能一个
ReDim
会解决这个问题(这是a.s.H在他最后的评论中向我建议的)。@jainashih my applogies,你的代码是正确的。我刚刚问了我的老板,这是正确的。非常感谢。@YoewE3K谢谢你,伙计。您的代码和janiashish代码都有效。另外,我还有更多的问题要问你们,因为我对excel vba一无所知。我会发布更多的问题,所以请留下来:)哈哈@nubcoder17-希望有人会回答,但我的午餐休息时间就要结束了,所以我今晚回家之前没有机会看这些。(除非我厌倦了工作,偷偷爬到山顶让我保持清醒。)你是我的英雄:)
Sub FillItUp()
        Dim lastRow As Long, lastCol As Long
        Dim oldEntry, newEntry As String
        Dim entries(), toCompare
        Dim pos As Integer
        lastRow = Sheets(1).Range("A65536").End(xlUp).Row
        lastCol = Sheets(1).Range("A6").CurrentRegion.columns.Count
        pos = 0
        ReDim entries(0 To 0)

        toCompare = Array("Avocent", "Channel", "Enterprise", "Industrial", _
                          "Service", "Telecom", "Light Industrial")

        oldEntry = Sheets(1).Range("E7").Value
        entries(pos) = oldEntry

        pos = pos + 1

        For i = 7 To lastRow
            newEntry = Sheets(1).Range("E" & i).Value

            If newEntry <> oldEntry Then
                ReDim Preserve entries(0 To pos)
                entries(pos) = oldEntry
                oldEntry = newEntry
                pos = pos + 1
            End If

            If i = lastRow Then
                ReDim Preserve entries(0 To pos)
                entries(pos) = newEntry

            End If