1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

VBA: Inputbox Eingabe überprüfen

Discussion in 'Programmieren' started by Wesker, Jun 23, 2009.

Thread Status:
Not open for further replies.
  1. Wesker

    Wesker Kbyte

    Hallo Leute,

    kann mir jemand den code veraten wie in in VBA eine Eingabe in der InputBox überprüfen kann?

    In die Inputbox dürfen nur Zahlen eingetragen werden und sonst nichts. Wenn z. B. jemand einen Buchstaben reinschreibt soll die Prozedur beendet werden.

    Bsp:
    Wenn Variable1 = Zahl, dann soll man Variable2 eintragen
    Wenn Variable1 = Text oder sonst irgendwas soll die Prezudur abgebrochen werden

    Wie geht das?
     
  2. VB-Coder

    VB-Coder Megabyte

    Code:
    zahl = inputbox("Bitte eine Zahl eingeben:")
    
    if isnumeric(zahl) then 
    msgbox "es wurde eine zahl eingegeben"
    
    else msgbox "es wurde keine zahl eingegeben"
    end if
    
    Das einfachste ist mit isnumeric zu prüfen ob die Eingabe eine Zahl ist und das ganze durch eine IF Schleife laufen zu lassen. Also was passiert, wenn Zahl und was passiert wenn nicht Zahl
     
  3. Wesker

    Wesker Kbyte

    Das ist nicht ganz das was ich gemeint habe, vielleicht wird es mit dem code etwas verständlicher:

    Code:
    'Variablendefinition
      Dim Zahl_1 As Variant
      Dim Zahl_2 As Variant
      Dim Addition As Variant
      Dim Subtraktion As Variant
      Dim Division As Variant
      Dim Produkt As Variant
      Zahl_1 = (InputBox("Bitte geben Sie 1. Zahl ein", "Berechnung"))
      Zahl_2 = (InputBox("Bitte geben Sie eine 2. Zahl ein", "Immer noch Berechnung"))
      
    ' If IsNumeric(Zahl_1) Then
         MsgBox "Es wurde eine Zahl eingeben"
      Else: MsgBox "es wurde keine Zahl eingegenben"
      End If
      If IsNumeric(Zahl_2) Then
         MsgBox "Es wurde eine Zahl eingegeben"
      Else: MsgBox "es wurde keine Zahl eingegenben"
      End If
    'rechnen
      Addition = Zahl_1 + Zahl_2
      Subtraktion = Zahl_1 - Zahl_2
      Produkt = Zahl_1 * Zahl_2
      Division = Zahl_1 / Zahl_2
    'Ausgabe
      MsgBox "Addition = " & Addition & Chr(13) & "Subtraktion = " & _
      Subtraktion & Chr(13) & "Produkt = " & Produkt & Chr(13) & _
      "Division = " & Division
    
    Ich will folgendes erreichen:

    Wenn beim Variant Zahl_1 oder Zahl_2 keine Zahl eingegeben wrude dann soll er eine Meldung bringen "Sie dürfen nur Zahlen eingeben" und es soll das Debugg Fenster von VBA nicht auftauchen. Wenn alles richtig eingegeben wurde dann sollen in der MsgBox die Ergebnisse angezeigt werden.
     
  4. VB-Coder

    VB-Coder Megabyte

    Code:
    'Variablen vom gleichen Typ kann man durch Komma getrennt in einer Zeile deklarieren
    DIM Zahl_1, Zahl_2, Addition, Subtraktion, Division, Produkt AS VARIANT
    
    'Hier wird die GOTO Sprungmarke für einen Rücksprung zur Eingabe1 festgelegt
    Eingabe1:
    
    'Hier wird die erste Zahl abgefragt
    Zahl_1 = InputBox("Geben Sie die erste Zahl ein","Berechnung")
    
    
    'Hier wird die GOTO Sprungmarke für einen Rücksprung zur Eingabe2 festgelegt
    Eingabe2:
    
    'Hier wird die zweite Zahl abgefragt
    Zahl_2 = InputBox(Geben Sie die zweite Zahl ein","Berechnung")
    
    
    
    'Hier wird geprüft ob Eingabe 1 Eine Zahl ist. Wenn nicht springt der Ablauf zurück zur Eingabeaufforderung 1
    IF NOT isnumeric(Zahl_1) THEN
    MsgBox "Sie müssen eine Zahl eingeben !"
    GOTO Eingabe1
    End IF
    
    
    'Hier wird geprüft ob Eingabe 2 Eine Zahl ist. Wenn nicht springt der Ablauf zurück zur Eingabeaufforderung 2
    IF NOT isnumeric(Zahl_2) THEN
    MsgBox "Sie müssen eine Zahl eingeben !"
    GOTO Eingabe2
    End IF 
    
    'Ab hier läuft der Code weiter wenn beides Zahlen sind.
    
    
    
     
  5. Wesker

    Wesker Kbyte

    Ich erhalte folgende Fehlermeldung:

    Fehler beim kompilieren

    Sprungmarke nicht definiert


    was muss ich jetzt machen?
     
  6. Urs2

    Urs2 Megabyte

    ...dann hast Du vergessen die Zeilen "Eingabe1:" oder "Eingabe2:" inklusive Doppelpunkt einzutragen.

    Der Code von VB-Coder funktioniert richtig, ausser einem vergessenen Anführungszeichen in Zeile >
    Zahl_2 = InputBox("Geben Sie die zweite Zahl ein", "Berechnung")

    Gruss Urs
     
  7. Wesker

    Wesker Kbyte

    also ich möchte mich bei dir als erstes Bedanken :danke: da du mir aufgezeigt hast wie man an diese Sache herangehen soll. Den Code an sich hab ich jetzt durch nachgoogeln etwas verändert nämlich so:



    Dim Eingabe, Addition, Subtraktion, Division, Produkt As Variant
    Dim Zahl_1, Zahl_2 As single

    Eingabe = InputBox("Geben Sie die erste Zahl ein","Berechnung")
    If Not isnumeric(Eingabe) Then
    MsgBox "Sie müssen eine Zahl eingeben !"
    Exit Sub
    End If
    Eingabe = Zahl_1

    Eingabe = InputBox("Geben Sie die erste Zahl ein","Berechnung")
    If Not isnumeric(Eingabe) Then
    MsgBox "Sie müssen eine Zahl eingeben !"
    Exit Sub
    End If
    Eingabe = Zahl_2



    Mich würde aber trotzdem interessieren wie man deinen Code richtig schreibt. Ist das so richtig?


    DIM Zahl_1, Zahl_2, Addition, Subtraktion, Division, Produkt AS VARIANT

    Eingabe1:

    Zahl_1 = InputBox("Geben Sie die erste Zahl ein","Berechnung")

    Eingabe2:

    Zahl_2 = InputBox(Geben Sie die zweite Zahl ein","Berechnung")

    IF NOT isnumeric(Zahl_1) THEN
    MsgBox "Sie müssen eine Zahl eingeben !"
    GOTO Eingabe1
    End IF

    IF NOT isnumeric(Zahl_2) THEN
    MsgBox "Sie müssen eine Zahl eingeben !"
    GOTO Eingabe2
    End IF



    Wenn das so richtig ist, kannst du mir verraten warum ich bei Eingabe1: bzw Eingabe2: sonst nichts schreiben muss und voher weiss VBA dass wenn da Eingabe1 steht der erste Wert nochmal abfragen werden muss? Meine Variable für die 1. Inputbox ist doch Zahl_1.
     
  8. VB-Coder

    VB-Coder Megabyte

    Das funktioniert so nicht. Weil du weist der Variablen Eingabe den Wert der InputBox zu. Dann überschreibst du die Variable Eingabe mit der Variablen Zahl_1. Da diese Variable aber nirgendwo einen Wert bekommt ist Eingabe somit auch wieder leer. Das gleiche passiert beim zweiten Durchlauf. Nur das du hier am Ende die Variable Eingabe mit der leeren Variable Zahl_2 überschreibst.
     
  9. Urs2

    Urs2 Megabyte

    So wird nie etwas daraus, das wird nie funktionieren... Google ist sehr gut...
    ...solange man weiss, was man mit den angezeigten Resultaten machen kann...

    Wenn Dir VB-Coder einen Code gibt, kopiere den in Dein Sub... alle Experimente kannst Du nachher machen...

    Hier ein kompletter Code, füge den komplett im VB-Editor ein - starte ihn - und schaue was er tut...
    ...und füge dann am vorgesehenen Platz Deinen Berechnungscode ein [Punkt Schluss]

    Code:
    Sub essai1()
    
    
                'Variablen vom gleichen Typ kann man durch Komma getrennt in einer Zeile deklarieren
    Dim Zahl_1, Zahl_2, Addition, Subtraktion, Division, Produkt As Variant
    
                'Hier wird die GOTO Sprungmarke für einen Rücksprung zur Eingabe1 festgelegt
    Eingabe1:
    
                'Hier wird die erste Zahl abgefragt
    Zahl_1 = InputBox("Geben Sie die erste Zahl ein", "Berechnung")
    
                'Hier wird geprüft ob Eingabe 1 Eine Zahl ist. Wenn nicht springt der Ablauf zurück zur Eingabeaufforderung 1
                'ich habe diese Prüfung verschoben, damit man das schon eingegebene nicht nochmals eingeben muss
    If Not IsNumeric(Zahl_1) Then
        MsgBox "Sie müssen eine Zahl eingeben !"
    GoTo Eingabe1
    End If
    
                'Hier wird die GOTO Sprungmarke für einen Rücksprung zur Eingabe2 festgelegt
    Eingabe2:
    
                'Hier wird die zweite Zahl abgefragt
    Zahl_2 = InputBox("Geben Sie die zweite Zahl ein", "Berechnung")
    
    
                'Hier wird geprüft ob Eingabe 2 Eine Zahl ist. Wenn nicht springt der Ablauf zurück zur Eingabeaufforderung 2
    If Not IsNumeric(Zahl_2) Then
        MsgBox "Sie müssen eine Zahl eingeben !"
    GoTo Eingabe2
    End If
    
                'prüfen ob zweite Zahl 0  > das ergäbe Div/Null und damit einen neuen Laufzeit-Fehler
    If Zahl_2 = 0 Then
        MsgBox "Die zweite Zahl darf nicht 0 sein, Sie müssen eine Zahl >0 eingeben !"
    GoTo Eingabe2
    End If
    
                'Ab hier läuft der Code weiter wenn beides Zahlen sind.__________________
                '    ab jetzt muss Dein Berechnungscode kommen, ab Zeile "'rechnen".......
    
    '
    '
    '
    '
    '
    
    End Sub
    

    - ich habe die Prüfung der Zahl2 verschoben, damit Abfrage1 nicht nochmals eingegeben werden muss

    . ich habe zusätzlich abgefragt, ob die Eingabe für Zahl2 = 0 (Null) ist >
    das ergäbe wieder einen Laufzeitfehler >>> Division durch Null
    Als Lehrer (was ich noch nie war) würde ich die Abfrage dieser Bedingung zuerst überprüfen...

    Wenn das klappt, kannst Du soviel herum Googeln wie Du willst, Du siehst ja dann, wenn es nicht mehr funktioniert...
    ...und Du hast wieder Deinen freien Nachmittag...

    Gruss Urs
     
  10. Wesker

    Wesker Kbyte

    @ VB-Coder
    gehen tut das schon, ich hab nur einen kleinen Fehler gemacht als ich den Code aufgeschrieben habe. Allerdings hat Urs2 recht und ich kriege hier ein Problem mit der 0 wenn ich das nicht zusätzlich abfange.

    Code:
    'Variablendefinition
      Dim Addition As Double
      Dim Division As Double
      Dim eingabe As Variant
      Dim Produkt As Double
      Dim Subtraktion As Double
      Dim Zahl_1 As Double
      Dim Zahl_2 As Double
    
      eingabe = (InputBox("Bitte geben Sie 1. Zahl ein", "Berechnung"))
      If Not IsNumeric(eingabe) Then
        MsgBox "Sie müssen eine Zahl eingeben !"
        Exit Sub
      End If
      Zahl_1 = eingabe
    
      eingabe = (InputBox("Bitte geben Sie eine 2. Zahl ein", "Immer noch Berechnung"))
      If Not IsNumeric(eingabe) Then
        MsgBox "Sie müssen eine Zahl eingeben !"
        Exit Sub
      End If
      Zahl_2 = eingabe
    
    'rechnen
      Addition = Zahl_1 + Zahl_2
      Subtraktion = Zahl_1 - Zahl_2
      Produkt = Zahl_1 * Zahl_2
      Division = Zahl_1 / Zahl_2
    
    'Ausgabe
      MsgBox "Addition = " & Addition & Chr(13) & "Subtraktion = " & _
      Subtraktion & Chr(13) & "Produkt = " & Produkt & Chr(13) & _
      "Division = " & Division
    
    
    @Urs2
    Das problem an meinem anderen Code (der von dir angepasst wurde) war dass ich bei der Addition ein falsches Ergebnis erhielt. Die Zahlen wurden nicht zusammengerechnet sondern zusammengesetzt und deswegen musste ich alle anderen Variablen außer eingabe als Double deklarieren.
     
  11. VB-Coder

    VB-Coder Megabyte

    Für normale Zahlen reicht übrigens die Deklaration als Integer. Sprich also als Ganzzahl. Du musst hier kein Double, also eine Gleitkommazahl mit doppelter Genauigkeit definieren. Das aber nur nochmal am Rande.

    Die Abfrage ob es sich um eine Zahl handelt und diese nicht null ist könntest du auch in einer Zeile unterbringen. Aber ich glaube das würde dich jetzt noch mehr überfordern. Lösbar wäre das ganze mit dem AND Operator innerhalb der IF NOT Schleife.
     
  12. Wesker

    Wesker Kbyte

    Ja, ich bin froh dass ich es so zum laufen gebracht habe, mehr muss da jetzt erstmal nicht sein

    Integer wäre eher schlecht, da man dort dann keine Kommazahl eingeben kann, so hab ich es zumindest verstanden.

    Nochmal danke für euro Hilfe
     
Thread Status:
Not open for further replies.

Share This Page