Private Sub Command1_Click()
With FG1
Static i As Integer
i = i + 1
If i = 1 Then
    .TextMatrix(1, 1) = Format(Text1.Text - FrmYky_1k.Text2.Text, "00.00"): c = .TextMatrix(1, 1)
 ElseIf i = 2 Then
    .TextMatrix(1, 2) = Format(Text1.Text - (Val(FrmYky_1k.Text2.Text) + c), "00.00"): c = Val(c) + Val(.TextMatrix(1, 2))
 ElseIf i = 3 Then
    .TextMatrix(1, 3) = Format(Text1.Text - (Val(FrmYky_1k.Text2.Text) + c), "00.00"): c = Val(c) + Val(.TextMatrix(1, 3))
    .TextMatrix(1, 4) = Format(Text1.Text - (Val(FrmYky_1k.Text2.Text)), "00.00")
End If
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''第二粒
If i = 4 Then '每粒药的第一点重新赋值
FrmYky_1k.Label4.Caption = "第2粒药第一点:"
FrmYky_1k.Text2.Text = Text1.Text
 ElseIf i = 5 Then
    .TextMatrix(2, 1) = Format(Text1.Text - FrmYky_1k.Text2.Text, "00.00"): c = Val(.TextMatrix(2, 1))
 ElseIf i = 6 Then
    .TextMatrix(2, 2) = Format(Text1.Text - (Val(FrmYky_1k.Text2.Text) + c), "00.00"): c = Val(c) + .TextMatrix(2, 2)
 ElseIf i = 7 Then
    .TextMatrix(2, 3) = Format(Text1.Text - (Val(FrmYky_1k.Text2.Text) + c), "00.00"): c = Val(c) + .TextMatrix(2, 3)
    .TextMatrix(2, 4) = Format(Text1.Text - (Val(FrmYky_1k.Text2.Text)), "00.00")
 End If
......
If i = 116 Then  '每粒药的第一点重新赋值
FrmYky_1k.Label4.Caption = "第30粒药第一点:"
FrmYky_1k.Text2.Text = Text1.Text
    ElseIf i = 117 Then
    .TextMatrix(30, 1) = Format(Text1.Text - FrmYky_1k.Text2.Text, "00.00"): c = Val(.TextMatrix(30, 1))
    ElseIf i = 118 Then
    .TextMatrix(30, 2) = Format(Text1.Text - (Val(FrmYky_1k.Text2.Text) + c), "00.00"): c = Val(c) + .TextMatrix(30, 2)
    ElseIf i = 119 Then
    .TextMatrix(30, 3) = Format(Text1.Text - (Val(FrmYky_1k.Text2.Text) + c), "00.00"): c = Val(c) + .TextMatrix(30, 3)
    .TextMatrix(30, 4) = Format(Text1.Text - (Val(FrmYky_1k.Text2.Text)), "00.00")
End If
End With
End Sub
这么多的代码怎么简化?
我的这个程序是给一个理化室做的药型测试软件,外部用一个数显表通过软件把数据采集到textbox控件中,然后按照上面的代码进行数据处理的
还有一个问题就是 在输入过程中 想重新输入该怎么做呢? 
比如正在输入第8行2列 发现该行数据错误 想重新输入第8行的数据 增加一个cancel按钮应该没问题 我想实现如下功能 
比如正在输入第8行2列 发现该行数据错误 这时点击一下cancel按钮后 清空第8行的数据 然后点击command1 按钮继续输入数据,该怎么做呢?

解决方案 »

  1.   

    把他做成一个过程或函数吧,
    在主程序中调用这过程就可以了!可以简化一直重复的相同功能代码
    比如
    private sub XXXX
    .............
    call 把老用的做成过程或函数
    ..............
    end subprivate sub YYYY
    .............
    call 把老用的做成过程或函数
    .............
    end subsub 把老用的做成过程或函数
    ............
    end sub
      

  2.   

     1楼的 是回答过 这个问题的简化部分和你回答过的不一样 cancel按钮你告诉我的
    简化部分有办法吗?
      

  3.   

    用的是vs还是ms的flexgrid,如果是前者 直接就可以编辑static i as integer VB里的静态变量尽量不要使用
      

  4.   

    7楼的
    我用的是 vsflexgrid 
    直接编辑是什么意思?能详细点吗?
      

  5.   

    Private Sub Command1_Click() 
    Static i As Integer With FG1 
    i = i + 1 m = i\4 + 1  '第几粒药
    n = i mod 4Select case n
        Case 0
            FrmYky_1k.Label4.Caption = "第" & m & "粒药第一点:" 
            FrmYky_1k.Text2.Text = Text1.Text 
        Case 1, 2
            .TextMatrix(m, n) = Format(Text1.Text - (Val(FrmYky_1k.Text2.Text) + c), "00.00"): c = Val(c) + .TextMatrix(m, n) 
        Case 3
            .TextMatrix(m, 3) = Format(Text1.Text - (Val(FrmYky_1k.Text2.Text) + c), "00.00"): c = Val(c) + .TextMatrix(m, 3) 
            .TextMatrix(m, 4) = Format(Text1.Text - (Val(FrmYky_1k.Text2.Text)), "00.00") 
    End Select
    End With
    End Sub
      

  6.   

    11楼
    非常感谢您的帮忙 你的代码成功了
    还有一个问题就是 在输入过程中 想重新输入该怎么做呢? 
    比如正在输入第8行2列 发现该行数据错误 想重新输入第8行的数据 增加一个cancel按钮应该没问题 我想实现如下功能 
    比如正在输入第8行2列 发现该行数据错误 这时点击一下cancel按钮后 清空第8行的数据 然后点击command 按钮 从第8行开始重新输入数据,该怎么做呢? 
    有一个论坛网友给了我这样一个代码 但不好使
    Private Sub ComCancel_Click()
    If m = 0 Then Exit Sub
    m = m - 1
    End Sub