2013-10-09 3 views
0

Im очень новое на VBA и я надеялся, что если кто-нибудь может помочь мне в этом:VBA - Negative Даже номера с помощью InputBox

Я должен написать подчиненному, который запрашивает пользователя ввести отрицательное четное число используя поле ввода. Подпрограмма также должна суммировать все четные целые числа между 99 и введенным числом и отображать результат в окне сообщения. Он также должен включать проверку ошибок, которая проверяет начальный введенный номер как отрицательный, как четный, и как целое число.

Это то, что я придумал, но не кажется, что это будет работать надлежащим:

Option Explicit 

Sub NegativeEvenIneteger() 

    Dim Sum As Double 
    Dim NumberInput As Integer 
    Dim x As Double 

    NumberInput = InputBox("Please Enter a Negative Even Integer") 

    If NumberInput >= 0 Then MsgBox ("ERROR, Input number must be Negative") 
    If NumberInput Mod 2 = 0 Then MsgBox ("ERROR, Input number must be Even") 

    Sum = 0 
    For x = NumberInput + 1 To 0 Step 2 
     Sum = Sum + x 
    Next 

    MsgBox ("This equals " & Sum) & vbCrLf & _ 
    ("based on the inputted number of ") & NumberInput 

End Sub 

Пожалуйста, дайте мне знать, что вы думаете, ребята.

+1

Если 'NumberInput Mod 2 = 0', то число * равно *. Вы работаете так, как будто это не так. Более того, несмотря на то, что вы обнаруживаете ошибку. Лемме напишите ответ. – cHao

+0

Возможно, вам стоит прочитать http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist в связи с описанием ', похоже, не работает должным образом и, возможно, также http: //meta.stackexchange .com/вопросы/10811 /, как-ду-I-ASK-ответ-домашнее задание-вопросы – pnuts

ответ

1

OK следующий код должен делать эту работу:

Option Explicit 

Sub NegativeEvenIneteger() 

Dim Sum As Double 
Dim NumberInput As Integer 
Dim x As Double 
Dim NumberError As Boolean: NumberError = True 
NumberInput = InputBox("Please Enter a Negative Even Integer") 

If IsNumeric(NumberInput) Then 'test for number 
    If Not NumberInput Like "*.*" Then 'test for decimal 
     If NumberInput < 0 Then 'test for negative 
      If NumberInput Mod 2 = 0 Then 
       Sum = 0 
       For x = NumberInput To 98 Step 2 
        Sum = Sum + x 
       Next 
       NumberError = False 
      End If 
     End If 
    End If 
End If 

If NumberError Then 
    MsgBox "not a valid input" 
Else 
    MsgBox ("This equals " & Sum) & vbCrLf & ("based on the inputted number of ") & NumberInput 
End If 

End Sub 
1
  • Если NumberInput Mod 2 равен нулю, то NumberInput даже. В этом случае вы увидите сообщение об ошибке, в котором указано, что число не равно. Это сообщение должно, вероятно, срабатывать, если модуль не равен ноль.

  • Пока вы проверяете ввод, он пока ничего хорошего не делает; даже если вы показываете сообщение об ошибке, вы не останавливаете программу. Таким образом, даже если есть ошибка, как только пользователь нажимает «ОК» в окне сообщения, подпрограмма ворует солдат и дает результаты, которых это не должно.

    В случае ошибки вам необходимо вернуться, выбросить исключение, сделать что-то, чтобы выйти из основного пути кода и предотвратить повреждение функции.

Смежные вопросы