# Brauche Hilfe bei meinem VBA Rechner



## xJoSx (7. November 2012)

Hab hier mal einen Taschenrechner Programmiert:
 Brauche hilfe bei den Buttons MC, MR, MS M+ M- einfach nach ganz unten scrollen und mir bitte helfen!

```
Dim FirstNumber As Double
 Dim SecondNumber As Double
 Dim AnswerNumber As Double
 Dim ArithmeticProcess As String
 Dim Zahl As Double
 Dim Op As String
 
Private Sub cmd0_Click()
 If txtDisplay.Text = "0" Then
 txtDisplay.Text = "0"
 Else
 txtDisplay.Text = txtDisplay.Text & 0
 End If
 End Sub
 Private Sub cmd1_Click()
 If txtDisplay.Text = "0" Then
 txtDisplay.Text = "1"
 Else
 txtDisplay.Text = txtDisplay.Text & 1
 End If
 End Sub
 
Private Sub cmd2_Click()
 If txtDisplay.Text = "0" Then
 txtDisplay.Text = "2"
 Else
 txtDisplay.Text = txtDisplay.Text & 2
 End If
 End Sub
 Private Sub cmd3_Click()
 If txtDisplay.Text = "0" Then
 txtDisplay.Text = "3"
 Else
 txtDisplay.Text = txtDisplay.Text & 3
 End If
 End Sub
 Private Sub cmd4_Click()
 If txtDisplay.Text = "0" Then
 txtDisplay.Text = "4"
 Else
 txtDisplay.Text = txtDisplay.Text & 4
 End If
 End Sub
 Private Sub cmd5_Click()
 If txtDisplay.Text = "0" Then
 txtDisplay.Text = "5"
 Else
 txtDisplay.Text = txtDisplay.Text & 5
 End If
 End Sub
 Private Sub cmd6_Click()
 If txtDisplay.Text = "0" Then
 txtDisplay.Text = "6"
 Else
 txtDisplay.Text = txtDisplay.Text & 6
 End If
 End Sub
 Private Sub cmd7_Click()
 If txtDisplay.Text = "0" Then
 txtDisplay.Text = "7"
 Else
 txtDisplay.Text = txtDisplay.Text & 7
 End If
 End Sub
 Private Sub cmd8_Click()
 If txtDisplay.Text = "0" Then
 txtDisplay.Text = "8"
 Else
 txtDisplay.Text = txtDisplay.Text & 8
 End If
 End Sub
 Private Sub cmd9_Click()
 If txtDisplay.Text = "0" Then
 txtDisplay.Text = "9"
 Else
 txtDisplay.Text = txtDisplay.Text & 9
 End If
 End Sub
 

Private Sub cmdb_Click()
 If txtDisplay.Text <> "0123456789" Then
 If InStr(txtDisplay.Text, "") = 0 Then
 txtDisplay.Text = "-" & txtDisplay.Text
 Else
 txtDisplay.Text = Left(txtDisplay.Text, Len(txtDisplay.Text) - 1)
 End If
 End If
 End Sub
 
Private Sub cmdhoch2_Click()
 If txtDisplay.Text <> "0123456789" Then
 txtDisplay.Text = (txtDisplay.Text * txtDisplay.Text)
 End If
 
End Sub
 

Private Sub cmdplusminus_Click()
 If txtDisplay.Text <> "" Then
 If InStr(txtDisplay.Text, "-") = 0 Then
 txtDisplay.Text = "-" & txtDisplay.Text
 Else
 txtDisplay.Text = Right(txtDisplay.Text, Len(txtDisplay.Text) - 1)
 End If
 End If
 
End Sub
 
Private Sub cmdpunkt_Click()
 If InStr(txtDisplay.Text, ",") = 0 Then
 If txtDisplay.Text = "0" Then
 txtDisplay.Text = ","
 Else
 txtDisplay.Text = txtDisplay.Text & ","
 End If
 End If
 End Sub
 
Private Sub cmdlöschen_Click()
 txtDisplay.Text = " "
 End Sub
 Private Sub cmdplus_Click()
 FirstNumber = Val(Replace(txtDisplay.Text, ",", "."))
 txtDisplay.Text = ""
 ArithmeticProcess = "+"
 Op = "+"
 End Sub
 Private Sub cmdgleich_Click()
 SecondNumber = Val(Replace(txtDisplay.Text, ",", "."))
 If Op = "+" Then
 AnswerNumber = FirstNumber + SecondNumber
 End If
 If Op = "-" Then
 AnswerNumber = FirstNumber - SecondNumber
 End If
 If Op = "X" Then
 AnswerNumber = FirstNumber * SecondNumber
 End If
 If Op = "/" Then
 If SecondNumber = "0" Then
 MsgBox "Man kann nicht mit Null teilen", 16, "Achtung"
 Exit Sub
 End If
 AnswerNumber = FirstNumber / SecondNumber
 End If
 txtDisplay.Text = AnswerNumber
 End Sub
 Private Sub cmdminus_Click()
 FirstNumber = Val(Replace(txtDisplay.Text, ",", "."))
 txtDisplay.Text = ""
 Op = "-"
 cmdpunkt.Enabled = True
 End Sub
 Private Sub cmdmal_Click()
 FirstNumber = Val(Replace(txtDisplay.Text, ",", "."))
 txtDisplay.Text = " "
 Op = "X"
 cmdpunkt.Enabled = True
 End Sub
 Private Sub cmddurch_Click()
 FirstNumber = Val(Replace(txtDisplay.Text, ",", "."))
 txtDisplay.Text = " "
 Op = "/"
 cmdpunkt.Enabled = True
 End Sub
 

Private Sub cmdwurzel_Click()
 If txtDisplay.Text = "" Then
 MsgBox ("Es befindet sich noch kein Wert")
 Else
 txtDisplay.Text = Val(txtDisplay.Text) ^ 0.5
 End If
 End Sub
```

Jetzt wollte ich noch Buttons wie beim Normalen Taschenrechner machen also: MC, MR, MS, M+ ,M-
 Und noch ein Msgbox wo das M angezeigt würd wenn man auf z.b MR oder MS clickt wenn man auf MC clickt sollte das M weggehn.
 Nun brauche ich die codes und was ihr so reinschreiben würdet damit die buttons funktionieren.

```
Private Sub M_Change() Ist die MsgBox wo das M hin soll wenn man auf MR oder MS clickt
 
M.Text = "M"
 


End Sub
 
Private Sub MC_Click() Sollte dann das M weggehn
 If txtM.Text = "M" Then
 txtDisplay.Text = ""
 End If
 End Sub
 
Private Sub MM_Click()
 Zahl = Val(Replace(txtDisplay.Text, ",", ".")) Der M- Button beim Rechner
 End Sub
 
Private Sub MP_Click()
 Zahl = Val(Replace(txtDisplay.Text, ",", ".")) Der M+ Button beim Rechner
 
End Sub
 
Private Sub MR_Click()
 Zahl = Val(Replace(txtDisplay.Text, ",", ".")) Das Ergebnis MR button beim Rechner
 

End Sub
 
Private Sub MS_Click()
 Zahl = Val(Replace(txtDisplay.Text, ",", ".")) Der button wo alle eingegeben Sachen gespeichert werden MS button 
End Sub
```
Bitte um hilfe bei denn Buttons Danke


----------



## Yaslaw (7. November 2012)

Sorry, soviel unformatierten Code weigere ich mich zu lesen. 

Bitte stelle deine Frage spezifischer. zB: Ich habe die Werte X und Y und will mit VB die Formel [irgendwas] umsetzen.

Weitere Frage. VBA - Excel? Word? Outlook?

Nachtrag:
Tipp: Wiederholende Elemente in Funktionen auslagern

```
' klick 1
Private Sub cmd1_Click()
	clickNr(1)
END Sub

' klick 8
Private Sub cmd8_Click()
	clickNr(8)
END Sub

' eine Ziffer hintzufügen
Private Sub clickNr(byval clickedNr As Integer)
	If txtDisplay.txt = "0" Then
		 txtDisplay.Text = clickedNr
 	Else
 		txtDisplay.Text = txtDisplay.Text & clickedNr
 	End If	
En Sub
```

Nachtrag II:
Ich habe seit Jahren keinen Taschenrechner mehr verwendet. Was amchen denn diese Tasten M MM MM+ Mirgendwas?


----------



## xJoSx (7. November 2012)

Hab halt einen Windows Taschenrechner als übung in VBA übertragen und mir fehlen noch die Tasten MC,MR,MS,M+ und M- und villeicht noch eine Textbox die das M anzeigt wie beim normalen Taschenrechner in Windows 
 Meine Variabeln sind 
Dim FirstNumber As Double
 Dim SecondNumber As Double
 Dim AnswerNumber As Double
 Dim ArithmeticProcess As String
 Dim Zahl As Double
 Dim Op As String


Und hier die Buttons 5 buttons die fehlen

Private Sub M_Change() Ist die MsgBox wo das M hin soll wenn man auf MR oder MS clickt
 M.Text = "M"
 End Sub

Private Sub MC_Click() Sollte dann das M weggehn
 If txtM.Text = "M" Then
 txtDisplay.Text = ""
 End If
 End Sub

Private Sub MM_Click()
 Der M- Button beim Rechner
 End Sub

Private Sub MP_Click()
 Der M+ Button beim Rechner
 End Sub

Private Sub MR_Click()
 Das Ergebnis MR button beim Rechner
 End Sub

Private Sub MS_Click()
 Der button wo alle eingegeben Sachen gespeichert werden MS button 
End Sub


Jetzt brauch ich nur noch die Codes die das Selbe machen wie beim Normalen Windows Rechner


----------



## tombe (7. November 2012)

Du solltest auch mal lesen was man dir so antwortet und darauf reagieren. Was die M-Tasten für eine Funktion haben, hast du im zweiten Beitrag mit keinem Wort erklärt und den Code hast du auch nicht formatiert.

Soweit ich weiß ist:
- "M" einfach die Anzeige das ein Wert im Speicher vorhanden ist.
- "MC" löscht den Speichern (und die Anzeige).
- "MR" gibt den gespeicherten Wert aus.
- "M+" rechnet den aktuell angezeigten Wert zu dem im Speicher vorhandenen Wert dazu.
- "M-" macht genau das Gegenteil.
- "MS" keine Ahnung

Für diese Funktion wirst du dir eine allgemein gültige Variable erstellen müssen und dieser dann den entsprechenden Wert zuweisen (oder halt löschen).


----------



## xJoSx (7. November 2012)

Hab jetzt geschaft das:
MS die werte speichert und MR wieder ausgibt und wenn man eine zahl z.b 3 dann auf ms clickt und dann auf m+ kommt 6 raus aber wenn man eine andere Zahl will z.b man klickt 3 dann ms dann m+ dann 2 und dann mr kommt wieder 6 das selbe bei minus und bei mc hab ich denn txtDisplay.txt auf 0 gesetzt so das immer 0 kommt wenn man draufgeht.

Private Sub MC_Click()
txtDisplay.Text = "0"
End Sub

Private Sub MM_Click()
Zahl = Val(Replace(txtDisplay.Text, ",", ".")) - Zahl

End Sub

Private Sub MP_Click()
Zahl = Val(Replace(txtDisplay.Text, ",", ".")) + Zahl

End Sub

Private Sub MR_Click()
txtDisplay.Text = Zahl

End Sub

Private Sub MS_Click()
Zahl = Val(Replace(txtDisplay.Text, ",", "."))


End Sub


----------



## tombe (7. November 2012)

1) Versuche doch bitte deine Fragen oder Erklärungen so zu schreiben das man sie auch lesen kann. Mach zwischendurch mal einen Punkt und beginne einen neuen Satz anstatt alles am Stück zu schreiben. Dann noch ein bisschen die Groß- und Kleinschreibung beachten.

2) Gewöhne dir bitte an deinen Code entsprechend zu formatieren damit es lesbar ist.

Zum eigentlichen Problem: Überlege doch mal was beim Drücken einer der M-Tasten wirklich passieren soll.
Wenn du die Zahl 3 im Speicher hast und sie am Display zu sehen ist. Dann kommt natürlich 6 raus wenn du "M+" drückst. Es wird die Zahl dazugerechnet die zu sehen ist, nicht die die im Anschluss eingegeben wird.

Wenn du "MC" drückst, bringt es nichts wenn du nur die Anzeige löschst, du musst den Inhalt des Zwischenspeichers (Variable o.ä.) auf Null setzten damit der Wert weg ist.


----------

