在MSFlexGrid1.TextMatrix(i, 1),每个单元格都一个3位数组成的数字,当Check1(0)被选择,点击Command4把单元格中3个数字和为18的过滤掉,我写成以下代码,不过不好使,该如何改
Private Sub Command4_Click()
 Dim i As Integer, t As Integer
  Dim j As Integer
Dim a As Integer, aa As Integer, aaa As Integer
      
        For i = 1 To MSFlexGrid1.Rows - 1
        t = MSFlexGrid1.TextMatrix(i, 1)
        a = Val(Mid(t, 1, 1))'单元格第一个数字
        aa = Val(Mid(t, 2, 1))'单元格第二个数字
        aaa = Val(Mid(t, 3, 1))'单元格第三个数字
     
        If Check1(0).Value = 1 Then
        j = a + aa + aaa'三个数字的和        
        If not j =18 Then MSFlexGrid1.RemoveItem i '排除三个数字和为18的行,然后从新显示
        End If
        
    Next
   Label1.Caption = MSFlexGrid1.Rows - 1
End Sub

解决方案 »

  1.   

    If not j =18 Then MSFlexGrid1.RemoveItem i '排除三个数字和为18的行,然后从新显示 
    改为
    If j =18 Then MSFlexGrid1.RemoveItem i '排除三个数字和为18的行,然后从新显示 
      

  2.   

    楼上的老师,这么改不通过,If not j =18这个保留或删除应该不是重点,重点还是前面的代码好像有问题,现在If not j =18不论有没有 not都是错的
      

  3.   

    Private Sub Command4_Click()
        Dim i As Integer, t As Integer
        Dim j As Integer
        Dim a As Integer, aa As Integer, aaa As Integer    '不选就不需要进入循环了
        If Check1(0).Value <> vbChecked Then Exit Sub
        '因为删除行导致行变化,反向循环可以不受影响
        For i = MSFlexGrid1.Rows - 1 To 1 Step -1
            t = MSFlexGrid1.TextMatrix(i, 1)
            a = Val(Mid(t, 1, 1))
            aa = Val(Mid(t, 2, 1))
            aaa = Val(Mid(t, 3, 1))        j = a + aa + aaa        If Not j = 18 Then MSFlexGrid1.RemoveItem i
        Next    Label1.Caption = MSFlexGrid1.Rows - 1
    End Sub
      

  4.   

    一般循环remove都是从最后一个开始
    MSFlexGrid1.Rows - 1
      

  5.   

    http://topic.csdn.net/u/20081129/18/3964d1c9-ac41-4934-9457-8a31f352ebba.html 
    和这个是同样的问题 
    Private Sub Form_Load()
    'On Error Resume Next
    MSFlexGrid1.rows = 1
    MSFlexGrid1.cols = 3
    Dim row As Long
    Dim col As LongMSFlexGrid1.AddItem "567" & vbTab & "019" & vbTab & "428"
    MSFlexGrid1.AddItem "123" & vbTab & "446" & vbTab & "789"
    MSFlexGrid1.AddItem "915" & vbTab & "456" & vbTab & "789"
    MSFlexGrid1.AddItem "123" & vbTab & "554" & vbTab & "789"
    MSFlexGrid1.AddItem "123" & vbTab & "456" & vbTab & "602"’这里处理的是和为14的,你用CHECKBOX,只是多个判断而已
    For row = MSFlexGrid1.rows - 1 To 0 Step -1
        For col = 0 To MSFlexGrid1.cols - 1
            Dim txt As String
            txt = MSFlexGrid1.TextMatrix(row, col)
            If Val(Left(txt, 1)) + Val(Right(txt, 1)) + Val(Mid(txt, 2, 1)) = 14 Then
                MSFlexGrid1.RemoveItem row
                Exit For
            End If
        Next
    NextEnd Sub