Frage

I'm building a VB application that accepts numbers in the beginning. I want to be able to exit if the user presses the cancel button in any of the input boxes. The code is :

Private Sub Command1_Click()
Dim a, b, c, d As Integer
Dim response As Integer
Dim a1, b1, c1, d1 As String
a = InputBox("Enter Numerator 1")
b = InputBox("Enter Denominator 1")
c = InputBox("Enter Numerator 2")
d = InputBox("Enter Denominator 2")

a1 = Str(a)
b1 = Str(b)
c1 = Str(c)
d1 = Str(d)

If a1 <> "" And b1 <> "" And c1 <> "" And d1 <> "" Then
'All Actions
...
Else

 response = MsgBox("Are you sure you want to quit?", vbYesNo + vbQuestion, AdditionV1.0")
 If response = vbYes Then
 End
 Else
 Addition.Show
 End If

I've tried using StrPtr and it stil doesnt work. What happens is even if I press Cancel, it still displays the error message.

Help will really be appreciated.

War es hilfreich?

Lösung

StrPtr is the way to go. Since you didn’t show the relevant code, there is no telling what you did wrong (but there are several errors in the code anyway). In principle, the following works:

Dim a As String
a = InputBox("Enter Numerator 1")
If StrPtr(a) = 0 Then
    ' Nothing was entered.
End If

I suspect that you applied the check to a1 etc. instead of the original variables. Not only does this not work (Str forces the string to be non-null), it also makes no sense: what are those variables for, anyway?

Furthermore, all your variable declarations are wrong. The following:

Dim a, b, c, d As Integer

declares a, b and c as Variant. Only d will be an Integer. For this, and for other reasons (readability), never declare multiple variables in one statement. Always declare them separately. Oh, and use meaningful names. a, b, c, d aren’t helpful.

Andere Tipps

If I understand your question correctly, you want to stop processing the moment user presses a cancel button.

I would suggest doing something like this (Note that I changed the variables to a1, b1,c1,d1 of assignment from InputBox):

    Private Sub Command1_Click()
    Dim a, b, c, d As Integer
    Dim response As Integer
    Dim a1, b1, c1, d1 As String

    a1 = InputBox("Enter Numerator 1")
    if (a1 = "")
       exit sub
    endif

    b1 = InputBox("Enter Denominator 1")
    if (b1 = "")
       exit sub
    endif

    c1 = InputBox("Enter Numerator 2")
    if (c1 = "")
       exit sub
    endif

    d1 = InputBox("Enter Denominator 2")
    if (d1 = "")
       exit sub
    endif


    If a1 <> "" And b1 <> "" And c1 <> "" And d1 <> "" Then
    'All Actions
    ...
    Else

     response = MsgBox("Are you sure you want to quit?", vbYesNo + vbQuestion, AdditionV1.0")
     If response = vbYes Then
     End
     Else
     Addition.Show
     End If
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top