Wie addiere ich Zahlen in VBA?

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.


diejojoo295 
Beitragsersteller
 01.06.2016, 09:59

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

0

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


mirolPirol  01.06.2016, 10:16

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. 

0
diejojoo295 
Beitragsersteller
 01.06.2016, 10:18

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

0

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(...))