VBA Do loop до 0 или "" - PullRequest
       19

VBA Do loop до 0 или ""

0 голосов
/ 05 ноября 2018

Ниже кода подсчитывается итоговое количество учеников в школе и среднее количество учеников в классе.

Он запускает код, пока пользователь не введет «0».

Как я могу гарантировать, что "0 класс" не будет считаться дополнительным классом? В настоящее время я достигаю этого, вычитая -1 из B, но это не элегантное решение - вычисления верны, но класс по-прежнему указан в окончательном варианте 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 голосов
/ 05 ноября 2018

Это поздняя публикация, но здесь приведен код для выполнения всех требований, которые вы заявили, с помощью нескольких настроек существующего кода:

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, а также убедиться, что у `B 'есть значение, чтобы избежать ошибки деления на ноль.

В-третьих, этот код обрабатывает Cancel из InputBox.

0 голосов
/ 05 ноября 2018

Обычный подход к этому - сначала спросить, а затем протестировать с Do While вместо Loop Until, а затем снова спросить. Примерно так:

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