Wie addiere ich Zahlen in VBA?
Hi, folgende Aufgabe muss ich lösen: Nach Eingabe von zwei Zahlen fragt das Programm ob plus oder minus gerechnet werden muss und gibt dann das entsprechende Ergebnis aus... Ich habe folgende Lösung:
Public Zahl1, Zahl2, Ergebnis As Long
Public Art As String
Sub Zahlen()
Zahl1 = InputBox("Geben Sie die erste Zahl ein: ")
Zahl2 = InputBox("Geben Sie die zweite Zahl ein: ")
Art = InputBox("Sollen die Zahlen addiert oder subtrahiert werden? +/-")
If Art = "+" Then
Ergebnis = (Zahl1 + Zahl2)
Else
Ergebnis = (Zahl1 - Zahl2)
End If
MsgBox ("Das Ergebnis lautet " & Ergebnis & ".")
End Sub
Das Problem ist, dass das Ergebis, wenn Zahl1 & 2 jeweils 1 sind, ja logischerweise 2 sein müsste...allerdings kommt halt 11 raus. Also er fügt die Zahlen einfach zusammen.
Kann mir da jemand helfen?? Danke im Voraus :)
3 Antworten
Die erste Zeile ist ein typischer Anfängerfehler in VBA.
Public Zahl1, Zahl2, Ergebnis As Long
Bedeutet nicht, dass alle drei als Long dimensioniert werden, sondern dass Zahl1 und Zahl2 als Variant und nur Ergebnis als Long dimensioniert wird. Dadurch wird in Zahl1 und Zahl2 das Variablenformat reingespeichert, was aus der Textbox kommt. Und das ist halt String. Wenn man zwei Strings "zusammenrechnet", kommt eben 11 anstatt 2 raus.
Das hier sollte schon reichen, um das Problem zu beheben:
Public Zahl1 As Long, Zahl2 As Long, Ergebnis As Long
Dadurch werden alle drei Variablen als Zahlen dimensioniert und dann wird auch richtig damit gerechnet.
das hätte wegen dem plus in "ergebnis" nicht funktioniert...hab das jetzt als string und jetzt gehts :) Aber Danke!!!
Hab die Lösung grad selbst gefunden :D
Option Explicit
Public Zahl1, Zahl2 As Long
Public Art, Ergebnis As String
Sub Zahlen()
Zahl1 = InputBox("Geben Sie die erste Zahl ein: ")
Zahl2 = InputBox("Geben Sie die zweite Zahl ein: ")
Art = InputBox("Sollen die Zahlen addiert oder subtrahiert werden? +/-")
If Art = "+" Then
Ergebnis = (Zahl1 + Zahl2)
Else
Ergebnis = (Zahl1 - Zahl2)
End If
MsgBox ("Das Ergebnis lautet " & Ergebnis & ".")
End Sub
Ergebnis musste auch string sein...da kommt das plus ja auch vor
Ja danke ;) werd mir das auf jeden Fall mal genauer angucken
Sieh dir mal an, was @Suboptimierer geantwortet hat, so wäre es richtig.
Dein eigenes Ergebnis funktioniert nur deshalb, weil das Ergebnis der InoutBox (immer vom Typ string) automatisch von VBA in den Typ long umgewandelt wird, da Zahl1 und Zahl2 ja als long deklariert wurden.
Sauberer ist es, explizit aus dem Ergebnisstring eine Zahl vom Typ Long mit der Funktion CInt() oder besser CLong() zu machen.
Du solltest die Variablen mit passendem Typ deklarieren
Sub Zahlen()
Dim Zahl1 As Integer
Dim Zahl2 As Integer
Dim Ergebnis As Integer
Dim Art As String
...
Achte darauf, dass ganz oben im Modul "Option Explicit" steht. Dies entbindet dich jedoch nicht davon, die Datentypen der Variablen festzulegen. InputBox gibt standardmäßig String zurück.
Alternativ kannst du den Rückgabewert von InputBox casten:
Zahl1 = CInt(InputBox(...))