TexA1,TexA2,TexA3,TexA4,TexA5是5个textbox,点击CommandButton1时,5个textbox中最大的数颜色变成&HFF&,最小的变成&HFFFF&,只能有一个最大值和最小值变颜色,最后将textbox中没有变颜色的3个值球平均数.就像比赛打分一样,去掉一个最高值,一个最低值,然后求平均数.
多谢大家帮忙
Dim sum As Single
Dim AverageScore As Single
Dim Max As Single
Dim Min As Single
Private Sub CommandButton1_Click()
If TxtA1.Value = TxtA2.Value And TxtA2.Value = TxtA3.Value And TxtA3.Value = TxtA4.Value And TxtA4.Value = TxtA5.Value Then
   TxtA1.ForeColor = &HFF&
   TxtA2.ForeColor = &HFFFF&
Else
   If TxtA1.Value > TxtA2.Value Then Max = TxtA1.Value
     Min = TxtA2.Value
   If TxtA1.Value < TxtA2.Value Then Max = TxtA2.Value
     Min = TxtA1.Value
   If TxtA3.Value > Max Then Max = TxtA3.Value
   If TxtA3.Value < Min Then Min = TxtA3.Value
   If TxtA4.Value > Max Then Max = TxtA4.Value
   If TxtA4.Value < Min Then Min = TxtA4.Value
   If TxtA5.Value > Max Then Max = TxtA5.Value
   If TxtA5.Value < Min Then Min = TxtA5.Value
   If Max = TxtA1.Value Then TxtA1.ForeColor = &HFF&
   If TxtA1.ForeColor <> &HFF& Then If Max = TxtA2.Value Then TxtA2.ForeColor = &HFF&
   If TxtA1.ForeColor <> &HFF& And TxtA2.ForeColor <> &HFF& Then If Max = TxtA3.Value Then TxtA3.ForeColor = &HFF&
   If TxtA1.ForeColor <> &HFF& And TxtA2.ForeColor <> &HFF& And TxtA3.ForeColor <> &HFF& Then If Max = TxtA4.Value Then TxtA4.ForeColor = &HFF&
   If TxtA1.ForeColor <> &HFF& And TxtA2.ForeColor <> &HFF& And TxtA3.ForeColor <> &HFF& And TxtA4.ForeColor <> &HFF& Then If Max = TxtA5.Value Then TxtA5.ForeColor = &HFF&
   If Min = TxtA1.Value Then TxtA1.ForeColor = &HFFFF&
   If TxtA1.ForeColor <> &HFFFF& Then If Min = TxtA2.Value Then TxtA2.ForeColor = &HFFFF&
   If TxtA1.ForeColor <> &HFFFF& And TxtA2.ForeColor <> &HFFFF& Then If Min = TxtA3.Value Then TxtA3.ForeColor = &HFFFF&
   If TxtA1.ForeColor <> &HFFFF& And TxtA2.ForeColor <> &HFFFF& And TxtA3.ForeColor <> &HFFFF& Then If Min = TxtA4.Value Then TxtA4.ForeColor = &HFFFF&
   If TxtA1.ForeColor <> &HFFFF& And TxtA2.ForeColor <> &HFFFF& And TxtA3.ForeColor <> &HFFFF& And TxtA4.ForeColor <> &HFFFF& Then If Min = TxtA5.Value Then TxtA5.ForeColor = &HFFFF&
End If
Slide5.LblTotal = ""
Slide5.LblTotal1 = ""
Slide6.TextBox1 = ""
End Sub
Private Sub CommandTotal_Click()
Dim sum As Single
If TxtA1.ForeColor = &HFF& Or TxtA1.ForeColor = &HFFFF& Then sum = sum + CSng(TxtA1.Text)
If TxtA2.ForeColor = &HFF& Or TxtA2.ForeColor = &HFFFF& Then sum = sum + CSng(TxtA2.Text)
If TxtA3.ForeColor = &HFF& Or TxtA3.ForeColor = &HFFFF& Then sum = sum + CSng(TxtA3.Text)
If TxtA4.ForeColor = &HFF& Or TxtA4.ForeColor = &HFFFF& Then sum = sum + CSng(TxtA4.Text)
If TxtA5.ForeColor = &HFF& Or TxtA5.ForeColor = &HFFFF& Then sum = sum + CSng(TxtA5.Text)
AverageScore = Format(sum / 3, "#.##")
Slide5.LblTotal = AverageScore
End Sub

解决方案 »

  1.   

    你用的是文本框,不应该用Value属性,应该用Text属性。
    另外你的
    Slide5.LblTotal = ""
    Slide5.LblTotal1 = ""
    Slide6.TextBox1 = ""
    是什么意思?
      

  2.   

    排序的算法很乱,可能问题就在排序上面
    属性也不对,是VBA还是脚本?
      

  3.   

    CommandTotal_Click()过程里你怎么把最大和最小的数加起来除以3啊?
    Sum 得到的是最大数和最小数之和
      

  4.   

    Private Sub Command2_Click()
    Dim sum As Single
    If Not (Text1.ForeColor = &HFF&) And Not (Text1.ForeColor = &HFFFF&) Then sum = sum + CSng(Text1.Text)
    If Not (Text2.ForeColor = &HFF&) And Not (Text2.ForeColor = &HFFFF&) Then sum = sum + CSng(Text2.Text)
    If Not (Text3.ForeColor = &HFF&) And Not (Text3.ForeColor = &HFFFF&) Then sum = sum + CSng(Text3.Text)
    If Not (Text4.ForeColor = &HFF&) And Not (Text4.ForeColor = &HFFFF&) Then sum = sum + CSng(Text4.Text)
    If Not (Text5.ForeColor = &HFF&) And Not (Text5.ForeColor = &HFFFF&) Then sum = sum + CSng(Text5.Text)
    'AverageScore = Format(sum / 3, "#.##")
    'Slide5.LblTotal = AverageScore
    Text6.Text = sum
    End Sub
      

  5.   

    AverageScore = Format(sum / 3, "0.00")
    'Slide5.LblTotal = AverageScore
    Text6.Text = AverageScore
      

  6.   

    请大家帮忙看看CommandButton1中有没有想的不周全的地方
      

  7.   

    用控件数组不是更好么?假设这里有TxtIn为一组输入框,TxtAvg为显示平均值的输入框,btnDo为按钮Private Sub btnDo_Click()
        Dim MaxId As Integer        '记录最大值的Id号
        Dim MinId As Integer        '记录最小值的Id号
        Dim Sum As Currency         '求和
        Dim i As Integer            '循环计数器
        On Error GoTo ErrHandler    '捕捉错误
        MaxId = 0                       '初始化
        MinId = 0                       '
        Sum = 0                         '
        For i = 0 To TxtIn.Count - 1            '进行统计
            TxtIn(i).ForeColor = vbBlack
            If CCur(TxtIn(i)) < CCur(TxtIn(MinId)) Then MinId = i
            If CCur(TxtIn(i)) >= CCur(TxtIn(MaxId)) Then MaxId = i
            Sum = Sum + CCur(TxtIn(i))
        Next i
        TxtIn(MinId).ForeColor = &HFF&          '设最小值为红色
        TxtIn(MaxId).ForeColor = &HFFFF&        '设最大值为黄色
        Sum = Sum - CCur(TxtIn(MinId).Text)     '去掉一个最低分
        Sum = Sum - CCur(TxtIn(MaxId).Text)     '去掉一个最高分
        If TxtIn.Count > 2 Then TxtAvg.Text = Format(Sum / (TxtIn.Count - 2), "0.00")
                                                '输入框必须是两个以上
        Exit Sub
    ErrHandler:                                 '处理错误
        If Err.Number = 13 Then                 '只对付输入非数字时引起的转换错误
            MsgBox "输入错误", vbCritical, "错误"
            TxtIn(i).SetFocus                   '引起错误的输入框置焦点,并选定里面的文字
            TxtIn(i).SelStart = 0               '
            TxtIn(i).SelLength = Len(TxtIn(i))  '
        Else
            MsgBox "Error " & Err.Number & ":" & Err.Description
        End If
    End Sub
      

  8.   

    用控件数组
    Private Sub Command1_Click()
    Dim sum As Single
    Dim Aver As Single
    Dim Max As Single
    Dim Min As Single
    Dim indexmax As Integer
    Dim indexmin As Integer
    Max = Val(Text1(0).Text)
    Min = Max
    sum = Val(Text1(0).Text)
    For i = 1 To 4
     If Val(Text1(i).Text) > Max Then
     Max = Val(Text1(i).Text)
     indexmax = i
     End If
     If Val(Text1(i).Text) < Min Then
     Min = Val(Text1(i).Text)
     indexmin = i
     End If
    sum = sum + Val(Text1(i).Text)
    Next i
    Text1(indexmax).ForeColor = &HFF&
    Text1(indexmin).ForeColor = &HFFFF&
    If Max = Min Then Text1(1).ForeColor = &HFF&
    Aver = (sum - Max - Min) / 3
    Text2.Text = Format(Str(Aver), "#.##")
    End Sub
    至于输入环节的控制这里就省略了.