以下代码计算的是学校的最终学生人数和班级的平均学生人数。
它将一直运行代码,直到用户键入“ 0”为止。
如何确保不会将“ 0级”计为额外的课程?目前,我是通过从B中减去-1来实现的,但这并不是一个很好的解决方案-计算是正确的,但是该类仍列在最终的MsgBox
中。
顺便说一句,如果我想在用户将单元格留空时结束循环,该怎么办?简单的Loop Until Zak = ""
不起作用。
非常感谢,
Sub D1()
Dim Zak As Byte
Dim B As Byte, C As Byte
Dim kzak As String
Dim ktrid
Dim trid As Byte
Dim k, l As Integer
B = 0
kzak = ""
Do
Zak = InputBox("Amount of students")
B = B + 1
kzak = kzak & Str(B) & (" class") & (" ") & _
("Students ") & Str(Zak) & Chr(10)
k = k + Zak
Loop Until Zak = 0
C = (B - 1)
l = k / C
MsgBox kzak & Chr(10) & ("At school is ") & Str(k) & (" students") & _
(", on avarage ") & Str(l) & (" in a class")
End Sub
答案 0 :(得分:0)
一种常见的解决方法是先询问,然后使用Do While
而不是Loop Until
进行测试,然后再次询问。像这样:
Zak = InputBox("Amount of students")
Do While Zak <> 0
...
...
Zak = InputBox("Amount of students")
Loop
答案 1 :(得分:0)
这是一篇较晚的文章,但是下面的代码通过一些现有代码的调整就可以满足您陈述的所有要求:
Public Sub D2()
Dim Zak As String
Dim B As Integer
Dim kzak As String
Dim k As Integer
Dim l As Integer
B = 0
kzak = ""
Do
Zak = InputBox("Amount of students")
If Val(Zak) > 0 Then
B = B + 1
kzak = kzak & Str(B) & (" class") & (" ") & ("Students ") & Zak & Chr(10)
k = k + Val(Zak)
End If
Loop Until Zak = ""
If B > 0 Then
l = k / B
MsgBox kzak & Chr(10) & ("At school is ") & Str(k) & (" students") & (", on avarage ") & Str(l) & (" in a class")
End If
End Sub
注意我所做的一些更改。
首先,我更恰当地声明了变量。另外,使用您的代码k
将是一个变种。
第二,我能够移除B - 1
hack,同时确保“ B”具有避免被零除错误的值。
第三,此代码处理InputBox中的Cancel。