【问题标题】:VBA Do loop until 0 or ""VBA循环直到0或“”
【发布时间】:2018-11-05 19:43:35
【问题描述】:

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

它一直在运行代码,直到用户输入“0”。

如何确保“0 类”不会被计为额外的类?目前我通过从 B 中减去 -1 来实现它,但这不是一个优雅的解决方案 - 计算是正确的,但该类仍然列在 final 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

【问题讨论】:

  • 不确定这是否有帮助,但如果您使用Application.InputBox,您可以限制可以输入的数据类型。例如在可选参数中设置Type:=1 使得输入框只接受数字。你可以阅读更多关于它here
  • 请注意Dim k, l As Integer 仅声明l As Integerk As Variant 您必须为每个 变量Dim k As Long, l As Long 指定一个类型。我还推荐在 VBA 中使用 always to use Long instead of Integer,因为在 Integer 中根本没有任何好处。

标签: excel vba loops msgbox


【解决方案1】:

这是一篇较晚的帖子,但这里的代码只需对现有代码进行一些调整即可满足您提出的所有要求:

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。

【讨论】:

    【解决方案2】:

    对此的常见方法是先询问,然后使用Do While 而不是Loop Until 进行测试,然后再次询问。像这样的:

    Zak = InputBox("Amount of students")
    Do While Zak <> 0
        ...
        ...
        Zak = InputBox("Amount of students")
    Loop
    

    【讨论】:

      猜你喜欢
      • 2021-08-27
      • 1970-01-01
      • 2020-09-29
      • 2014-08-29
      • 1970-01-01
      • 2019-07-21
      • 2012-10-10
      • 2019-04-20
      • 2017-08-21
      相关资源
      最近更新 更多