窗体1有一个MSFlexGrid1,还有一个按键Command1,和一个Check1,在MSFlexGrid1(1,1)以下行的(列不变)每个单元格都只有一个3位数的数字如在MSFlexGrid1(1,1)是567,MSFlexGrid1(2,1)是019,MSFlexGrid1(3,1)是428,MSFlexGrid1(4,1)是028
效果:当Check1被选择时,点击Command1,那么在MSFlexGrid1每个单元格里数据的和等于14的将被删除,然后从新把保留的数据显示在MSFlexGrid1,如上面的例子MSFlexGrid1(3,1)是428,4+2+8=14,那么它将被删除,重新显示MSFlexGrid1(1,1)是567,MSFlexGrid1(2,1)是019,MSFlexGrid1(3,1)是028,这时428行已被删除。这段代码该如何写

解决方案 »

  1.   


    Private Sub Form_Load()
    MSFlexGrid1.rows = 1
    MSFlexGrid1.cols = 3
    Dim row As Long
    Dim col As Long
    MSFlexGrid1.AddItem "567" & vbTab & "019" & vbTab & "428"
    MSFlexGrid1.AddItem "123" & vbTab & "446" & vbTab & "789"
    MSFlexGrid1.AddItem "905" & vbTab & "456" & vbTab & "789"
    MSFlexGrid1.AddItem "123" & vbTab & "554" & vbTab & "789"
    MSFlexGrid1.AddItem "123" & vbTab & "456" & vbTab & "662"For row = 0 To MSFlexGrid1.rows - 1
        For col = 0 To MSFlexGrid1.cols - 1
            ChangeTxt row, col
        Next
    NextEnd SubPrivate Sub ChangeTxt(ByVal row As Long, ByVal col As Long)
    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.TextMatrix(row, col) = Replace(txt, Left(txt, 1), "0")
    End If
    End Sub
      

  2.   

    只要3位数的和=14的都将被删除(整行),然后剩余的将被重新排列行

    MSFlexGrid1(1,1)是567
    MSFlexGrid1(2,1)是019
    MSFlexGrid1(3,1)是428
    MSFlexGrid1(4,1)是028 
    MSFlexGrid1(5,1)是104
    MSFlexGrid1(6,1)是752
    MSFlexGrid1(7,1)是103




    这时428相加=14,752相加=14,删除这两行,然后重新排列
    MSFlexGrid1(1,1)是567
    MSFlexGrid1(2,1)是019
    MSFlexGrid1(3,1)是028
    MSFlexGrid1(4,1)是104
    MSFlexGrid1(5,1)是103



    并不是只要3位数的和=14,就把百位变成0??这里就一个条件就是单元格里的3个数相加=14的都将被删除
      

  3.   

    MSFlexGrid1(1,1),这个行最好不用
    MSFlexGrid1.AddItem "567" & vbTab & "019" & vbTab & "428"
    MSFlexGrid1.AddItem "123" & vbTab & "446" & vbTab & "789"
    MSFlexGrid1.AddItem "905" & vbTab & "456" & vbTab & "789"
    MSFlexGrid1.AddItem "123" & vbTab & "554" & vbTab & "789"
    MSFlexGrid1.AddItem "123" & vbTab & "456" & vbTab & "662"
    最好用For i = 1 To MSFlexGrid1.Rows - 1这么来定义
      

  4.   

    Private Sub Command1_Click()
    Dim i As Integer, j As Integer, tmp As Integer, mytxt As StringIf Check1 Then
        For i = 1 To MSFlexGrid1.Rows - 1
            tmp = 0
            mytxt = MSFlexGrid1.TextMatrix(i, 1)
            For j = 1 To Len(mytxt)
                tmp = tmp + Val(Mid(mytxt, j, 1))
            Next j
            If tmp = 14 Then MSFlexGrid1.RemoveItem i
        Next i
    End If
    End Sub
      

  5.   

    程序稍微修改一下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"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