总是出现下标越界问题?(高手请帮忙看看)
我想实现把MSFlexGrid的第二列相同的产品名进行数量的相加,并把第二次出现相同的产品名删除。可我每次运行时都出现下标越界的错误,我不知道是怎么回事?请高手帮忙看看?我原先想用Sql语句实现的可就是不能实现合并?所以想用程序来实现?
  With Grid2
        '外层循环
        For i = 1 To .Rows - 1
             findstr = .TextMatrix(i, 2)
             '内层循环
             For j = i + 1 To .Rows - 1
                  If findstr = .TextMatrix(j, 2) Then
                     .TextMatrix(i, 5) = Val(.TextMatrix(i, 5)) + Val(.TextMatrix(j, 5))    '单台量累加
                     .TextMatrix(j, 18) = "R"                                               '删除现同行
                  End If
             Next j        Next i    '   删除多余项
        For l = 1 To .Rows - 1
            If .TextMatrix(l, 18) = "R" Then    '提示这个地方下标越界,为第53行错误
                 .RemoveItem l
            End If
        Next l

解决方案 »

  1.   


    dim lngCount as Long
    lngCount = .Rows - 1  '用一个变量记住Grid的行数'   删除多余项
            For l = 1 To lngCount 
                If .TextMatrix(l, 18) = "R" Then    '提示这个地方下标越界,为第53行错误
                     .RemoveItem l
                End If
            Next l
      

  2.   

    With Grid2
            '外层循环
            For i = 1 To .Rows - 1
              
               findstr = .TextMatrix(i, 2)
                 '内层循环
                 For j = i + 1 To .Rows - 1
                      If findstr = .TextMatrix(j, 2) Then
                         .TextMatrix(i, 5) = Val(.TextMatrix(i, 5)) + Val(.TextMatrix(j, 5))    '单台量累加
                         .TextMatrix(j, 18) = "R"                                               '删除现同行
                      End If
                 Next j        Next i    '   删除多余项
           lngCount = .Rows - 1  '用一个变量记住Grid的行数
            For l = 1 To lngCount
                If .TextMatrix(l, 18) = "R" Then
                    .RemoveItem l
                End If
            Next l语句还是If .TextMatrix(l, 18) = "R" Then这句话错误,不知道是怎么回事?
      

  3.   

    当然出错了,for 时的lngCount为Grid原来的行数,但你有了removeitem后,行数不就会少了吗?那还要执行那么多次吗?
    '去除vfgDetail中的空行
    Public Sub RemoveNullRow()
        Dim i As Integer
        Dim i2 As Integer
        With vfgDetail
            If .Rows < 2 Then
                Exit Sub
            End If
            i2 = 1
            For i = 1 To .Rows - 1
                If .TextMatrix(i2, 1) = "" Then
                    .RemoveItem i2
                    i2 = i2 - 1
                End If
                i2 = i2 + 1
            Next
        End With
    End Sub