VBA执行循环直到0或“”

时间:2018-11-05 19:43:35

标签: excel vba excel-vba loops msgbox

以下代码计算的是学校的最终学生人数和班级的平均学生人数。

它将一直运行代码,直到用户键入“ 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

2 个答案:

答案 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。