Private Sub Command1_Click()
    Dim max As Integer, min As Integer
    Dim avg As Single, sum As Single
    max = 0
    min = 10
    Dim ary(10) As Integer
    Dim i As Integer
    For i = 0 To 9
        Controls("text" & i + 2).Text = ary(i)
        If ary(i) > max Then
            max = ary(i)
        End If
        If ary(i) < min Then
            min = ary(i)
        End If
    Next
    Label2.Caption = "去掉一个最高分" & max
    Label3.Caption = "去掉一个最低分" & min
    sum = sum + ary(i)
    avg = (sum - min - max) / 8
    Label4.Caption = "该选手的最后得分是" & avg
End Sub
运行时,随便输入10个1-10之间的数字,结果是这样没有报错另外,代码有写的繁琐或不恰当的地方,欢迎批评指出感谢。

解决方案 »

  1.   

    这行有问题,应该反过来,把text内的数值赋值给ary。
    楼主最好把10个text控件做成控件数组,这样就可以简单的写成:ary(i)=val(text(i))
    还有,ary(10)最好是single,评委打分不一定是整数。
      

  2.   

    所以说验证人输入值是否合法这一亘古难题维持了程序员这一职业不会被所谓AI淘汰。一般会在text的Lostfocus事件中,用IsNumeric函数判断,如果有区间限制的,再加个区间限制判断,比如楼主的0~10。
    真如赵四老师说的有如此装逼评委,也只好睁只眼闭只眼,通通按single和谐了。
      

  3.   

    三四
    叁拾肆
    XXXIV
    36,哦不,再减掉2
    ……
    子子孙孙无穷尽也
      

  4.   

    感谢各位大佬。改正后代码如下:
    Private Sub Command1_Click()
        Dim max As Single, min As Single
        Dim avg As Single, sum As Single
        max = 0
        min = 10
        Dim ary(10) As Single
        Dim i As Integer
        For i = 0 To 9
            ary(i) = Val(Text2(i).Text)
            If ary(i) > max Then
                max = ary(i)
            End If
            If ary(i) < min Then
                min = ary(i)
            End If
            sum = sum + ary(i)
        Next
        Label2.Caption = "去掉一个最高分" & max
        Label3.Caption = "去掉一个最低分" & min
        avg = (sum - min - max) / 8
        Label4.Caption = "该选手的最后得分是" & avg
    End Sub
      

  5.   

    “平均分”的结果,还是处理一下吧。
    那么长一串小数,不觉得搞笑?Label4.Caption = "该选手的最后得分是:" & format$(avg, "0.0#")