VBA 循环直到 0 或 ""
VBA Do loop until 0 or ""
下面的代码正在计算学校的最终学生人数和 class 中的平均学生人数。
这是 运行 用户键入“0”之前的代码。
如何确保“0 class”不会被计为额外的 class?目前我通过从 B 中减去 -1 来实现它,但这不是一个优雅的解决方案 - 计算是正确的,但 class 仍然列在最终 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
一个常见的方法是先询问,然后用 Do While
代替 Loop Until
进行测试,然后再次询问。像这样:
Zak = InputBox("Amount of students")
Do While Zak <> 0
...
...
Zak = InputBox("Amount of students")
Loop
这是一个迟到的 post,但这里的代码只需对现有代码进行一些调整即可完成您提出的所有要求:
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 的取消。
下面的代码正在计算学校的最终学生人数和 class 中的平均学生人数。
这是 运行 用户键入“0”之前的代码。
如何确保“0 class”不会被计为额外的 class?目前我通过从 B 中减去 -1 来实现它,但这不是一个优雅的解决方案 - 计算是正确的,但 class 仍然列在最终 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
一个常见的方法是先询问,然后用 Do While
代替 Loop Until
进行测试,然后再次询问。像这样:
Zak = InputBox("Amount of students")
Do While Zak <> 0
...
...
Zak = InputBox("Amount of students")
Loop
这是一个迟到的 post,但这里的代码只需对现有代码进行一些调整即可完成您提出的所有要求:
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 的取消。