Frage von diejojoo295, 64

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 :)

Antwort
von Suboptimierer, 34

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(...))
Antwort
von daCypher, 38

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.

Kommentar von diejojoo295 ,

das hätte wegen dem plus in "ergebnis" nicht funktioniert...hab das jetzt als string und jetzt gehts :) Aber Danke!!!

Antwort
von diejojoo295, 31

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

Kommentar von mirolPirol ,

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. 

Kommentar von diejojoo295 ,

Ja danke ;) werd mir das auf jeden Fall mal genauer angucken

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten