2017-09-25 77 views
0

嘿即时尝试编写一个小的VBA程序,计算平均测验得分问题是当我输入第三个数字它回来不正确后做第一个两个right.What我失踪?vba平均计算器用户形态

这是设计视图 This is the design view

Option Explicit 

Dim total As Double 
Dim number As Double 
Dim average As Double 


Private Sub CommandButton1_Click() 

If IsNumeric(TextBox1.Value) = True Then 
    total = CDbl(average + TextBox1.Value) 
    number = CDbl(number + 1) 
    average = CDbl(total/number) 
    TextBox2.Value = number 
    TextBox3.Value = average 
    TextBox1.Value = ""  
Else 
    MsgBox ("please enter a number") 
    TextBox1.Value = "" 
End If 

End Sub 
+0

'number'的值是多少?确保它不是'0' –

+0

数字是输入分数的次数它每次我输入score.Its即时分割总分由 –

+0

我知道这部分,第一次是什么值?它是'0'吗?因为这样你就会被划分为零并且出现错误 –

回答

0

你的数学是关闭的。如果你想这样做,使用以前的平均水平,而新的价值,那么你应该使用的公式是这样的:

([old average] + ([new value]/[count - 1]))/([count]/[count - 1]) 

然而,正如你可能会看到,这不是一个很容易阅读设计。我会去设计,使用array。这样,您可以更直观地保持数学运算,并且如果您愿意,还可以回顾旧分数。最简单的设计可能是保持阵列的分数数量。每次添加新分数时,这需要redim()。从性能角度来看,这是非常糟糕的做法。但在你的微型计算器中,这几乎不会成为问题。

+0

对不起,你可以解释一下数学,如im 5吗? –

+0

你说它适用于前两个值。如果他们是5和3,那么平均值是4.哪个是正确的。如果你再加7,平均值应该是(5 + 3 + 7)/ 3 = 5'。但是使用你的方法,你会得到'(4 + 7)/ 3 = 3.7'。这是不正确的。我在那里展示的数学是一种工作,但不是一个非常漂亮的工作。因此,你应该使用数组:-)。 – Noceo

+0

好吧学习阵列的另一天.wow谢谢你指出这对我来说,我只是实现了总= CDbl(总+ Quizscore)。即使它不漂亮,它的功能。它的功能,而不是总数= CDBl(平均+ Quizscore) –

0

,我认为你应该得到数,平均和总价值你做计算之前:

Option Explicit 

Dim total As Double 
Dim number As Double 
Dim average As Double 


Private Sub CommandButton1_Click() 

number = 0 
average = 0 
total = 0 

If IsNumeric(TextBox1.Value) = True Then 
    total = CDbl(average + TextBox1.Value) 
    number = CDbl(number + 1) 
    'prevent error 
    If number > 0 then 
     average = CDbl(total/number) 
    Else 
     average = 0 
    End If 
    TextBox2.Value = number 
    TextBox3.Value = average 
    TextBox1.Value = ""  
Else 
    MsgBox ("please enter a number") 
    TextBox1.Value = "" 
End If 

End Sub 

希望这有助于。