Taschenrechner mit Visual Basic

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

  • Hi an alle. ich mache gerade ein Praktikum als Fachinformatiker. Ich hab heut damit anfangen müssen, einen taschenrechner mit visual basic zu programmieren. ich hab schon ein bisschen erfahrung in dem programm.
    ich hab jetz mal angefangen mit dem aussehen, und hab den tasten schon funktionen hinzugefügt. also, dass wenn man z.b. auf 1 klickt, dass es in einem textfeld auch 1 hinschreibt, usw. und jetz hab ich leider keine ahnung, wie man den taschenrechner dazu bringt, dass er sich die zahlen merkt und, dass er es auch noch ausrechnet. wär echt nett, wenn mir jemand helfen könnte
    ps: es reicht, wenn die Addition funktioniert


    so sieht mein taschenrechner aus:
    [Blockierte Grafik: http://img44.imageshack.us/img44/3421/19574903.jpg]


    und so sieht mein Quelltext bis jetzt aus:
    Private Sub cb_g_Click() 'teilen zeichen


    End Sub


    Private Sub cb_i_Click() '"Ist gleich" zeichen


    End Sub


    Private Sub cb_m_Click() 'mal zeichen

    End Sub


    Private Sub cb_mi_Click() 'minus zeichen


    End Sub


    Private Sub cb_p_Click() 'plus zeichen


    End Sub


    Private Sub cb0_Click() 'Ziffer 0
    Label1.Caption = 0
    End Sub


    Private Sub cb1_Click() 'Ziffer 1
    Label1.Caption = 1
    End Sub


    Private Sub cb2_Click() 'Ziffer 2
    Label1.Caption = 2
    End Sub


    Private Sub cb3_Click() 'Ziffer 3
    Label1.Caption = 3
    End Sub


    Private Sub cb4_Click() 'Ziffer 4
    Label1.Caption = 4
    End Sub


    Private Sub cb5_Click() 'Ziffer 5
    Label1.Caption = 5
    End Sub


    Private Sub cb6_Click() 'Ziffer 6
    Label1.Caption = 6
    End Sub


    Private Sub cb7_Click() 'Ziffer 7
    Label1.Caption = 7
    End Sub


    Private Sub cb8_Click() 'Ziffer 8
    Label1.Caption = 8
    End Sub


    Private Sub cb9_Click() 'Ziffer 9
    Label1.Caption = 9
    End Sub


    Private Sub Label1_Click() 'Textfeld


    End Sub


    bitte ich brauch hilfe...
    danke schonmal im vorraus

  • Hallo Tequila99,


    da ich mit meinem neuen Laptop Vista fahre ist mir der Zugang zu Visual Basic 6 leider nicht mehr möglich.


    Habe das Problem mir mal unter VBA durch den Kopf gehen lassen und für eine einfache Addition folgen Code durchgespielt (funktioniert musst Du aber auf Deinen Code anpassen).


    Wie gewünscht ein Beispiel für die Addition von zwei Zahlen.


    ' ------------------------------------------------------------------
    Dim ZahlMerker As Integer ' wird benötigt um die 1.Zahl zu merken
    Dim RechMerker As String ' wird benötigt um die Rechenart zu merken
    ' ------------------------------------------------------------------
    Private Sub cmd3_Click()
    lbl1.Caption = "3"
    End Sub
    ' ---------------------------------------------------------
    Private Sub cmd1_Click()
    lbl1.Caption = "1"
    End Sub
    ' ---------------------------------------------------------
    Private Sub cmd2_Click()
    lbl1.Caption = "2"
    End Sub
    ' ---------------------------------------------------------
    Private Sub cmd4_Click()
    lbl1.Caption = "4"
    End Sub
    ' ---------------------------------------------------------
    Private Sub cmd5_Click()
    lbl1.Caption = "5"
    End Sub
    ' ---------------------------------------------------------
    Private Sub cmd6_Click()
    lbl1.Caption = "6"
    End Sub
    ' ---------------------------------------------------------
    Private Sub cmd7_Click()
    lbl1.Caption = "7"
    End Sub
    ' ---------------------------------------------------------
    Private Sub cmd8_Click()
    lbl1.Caption = "8"
    End Sub
    ' ---------------------------------------------------------
    Private Sub cmd9_Click()
    lbl1.Caption = "9"
    End Sub
    ' ---------------------------------------------------------
    Private Sub cmdGleich_Click()
    Select Case RechMerker
    Case "+"
    lbl1.Caption = ZahlMerker + Val(lbl1.Caption)
    End Select
    End Sub
    ' ---------------------------------------------------------
    Private Sub cmdplus_Click()
    ZahlMerker = Val(lbl1.Caption)
    RechMerker = "+"
    lbl1.Caption = ""
    End Sub



    Wenn ich Dir damit helfen konnte, bitte schön.


    Gruß
    Sascha

    Wer ein Problem erkennt, und nichts zu seiner Beseitigung unternimmt, der ist möglicherweise ein Teil dieses Problems.:D

  • Hallo liebe Community :p

    Erstmal ein Nasenrümpfer :evil:

    Dein Vorgestellter Code ist als solcher nicht vorhanden,schöner wäre es gewesen wenn du einen Ansatz fomuliert hättest und zur Ergänzung dann in einem Forum fragst !

    Hier mal ein Ansatz mit Excel 2000 VB,du weisst das das ein größeres Projekt ist und mindestens 1-2 Tage intensivste Arbeit erfordert(bei Profis) :?:

    Habe jetzt schon festgestellt das die Fehlerroutine das größte Modul sein wird.

    Liebe Grüße euer Tanto :p

    Meine Idee dazu war, Zahlen wie Operanden jeweils zu Isolieren und in ein Array zu legen,beachte aber das Operanden auch vorangestellt werden dürfen,habe aber weitere Arbeit eingestellt,ist zu umfangreich ;)


    Code
    Sub Plus()
        Cells(4, 4) = Cells(4, 4) & "+"
    End Sub


    Code
    Sub Minus()
        Cells(4, 4) = Cells(4, 4) & "-"
    End Sub


    Code
    Sub Mal()
        Cells(4, 4) = Cells(4, 4) & "*"
    End Sub


    Code
    Sub Geteilt()
        Cells(4, 4) = Cells(4, 4) & "/"
    End Sub



    Noch einige Gedankengänge :D

    On Error Goto ErrorHandler/Über Functionen auslagern :-)

    Operanden können vor/hinter angestellt sein(nicht vergessen) :cry:

    Erstelle dir eine Liste mit möglichen Fehlern um gegebenenfalls zu korrigieren 8O

    Vorrangig sind Einschränkungen statt Korrigierung ;)

    Viel spass bei dem Projekt :lol:

  • ich möchte gern noch, dass der taschenrechner minus, mal, geteilt kann, ich möchte dafür aber nicht gleich einen ganz neuen code schreiben, sonder die funktion einfach hinzufügen.
    so sieht es im moment aus


  • ich würd es gern so machen, dass man mehrere rechnungen auf einmal machen kann.
    z.b. 5*3=15 ... un wenn ich jetz ein paar andere rechnungen mach, z.b. 15(ergebnis)/5 dann rechnet der 3(zweite zahl)/5.
    wie bekomm ich das problem in den griff

  • @tequila99


    Nachdem Du nun mit ein wenig Hilfe so weit gekommen bist sollte das für
    Dich doch kein Problem mehr sein.


    Dein Ergebnis (ob in einem Label oder einem Textfeld) liegt doch vor.
    Nun nimmst Du Dein Ergebnis und rechnest weiter damit.


    Das setzt natürlich voraus, dass Du die Zahl mit der neuen Eingabe nicht löscht.


    :|Gruß
    Sascha

    Wer ein Problem erkennt, und nichts zu seiner Beseitigung unternimmt, der ist möglicherweise ein Teil dieses Problems.:D

  • Hallo liebe Community :D

    Da hab ich ja noch was,vielleicht brauchbar :-)

    Eine Function die Zahlenblöcke isoliert und einem Array übergibt ;)

    Die Functionsparameter dürften sich im Makro klären :!:

    Liebe Grüße euer Tanto :p




    Die Function lässt sich auch leicht ändern um Operatoren zu isolieren :pc:

    Ersetzen
    Like "[0-9,.]"
    Durch
    Like "[+-*/]" und oder weitere Operatoren

  • Hallo liebe Community :D

    Erster kleiner Versuch :freu2:

    Liebe Grüße euer Tanto :p

    Zur Zeit funktionieren +-*/ mit positiven Zahlen

    Beispiel :-)

    Eingabe =Range("D4")="6+4/2+1,1"
    Ergebnis=Range("D5")=6,1

    Code
    Option Explicit





    Dann war mir noch folgendes zur Like Syntax aufgefallen.
    Diese beiden Zeichen wurden bemänngelt "*/",deshalb eine weitere oder verknüpfung in eine der obigen Functionen :evil:


    Kurzbeschreibung wie zerlegt wird


    Definierten String "6+4/2+1,1" bzw. eingabe


    Zahlenblöcke werden einem Eindimensionalen Array übergeben,indexende mit Ubound ermittelt
    6
    4
    2
    1,1
    Festgestellte Anzahl über Index =4 (der index ist der 2 Parameter der Functionen)


    Operatoren werden isoliert
    +
    /
    +
    Festgestellte Anzahl über Index =3 (der index ist der 2 Parameter der Functionen)


    Der erste Zahlenblock wird der Ergebnisvariablen zugewiesen


    Nun können parallel Zahlenblöcke wie Operanden über If bedingungen die Ergebnisvariable füllen.

  • Option Compare Database
    Option Explicit
    'Taschenrechner
    Dim gmDezimal As Integer
    Dim gmOperator As Double





    Function Clear() '********************
    '** Alles Löschen **
    '********************



    Dim f As Form

    Set f = Forms!Taschenrechner


    f!memoryfield = 0
    f!Anzeige = 0
    f!zeichen = ""
    f!operator = 0
    gmDezimal = 0


    End Function


    Function ziffern(z As Integer) '********************
    '** Dezimalstellen **
    Dim f As Form '********************


    Set f = Forms!Taschenrechner
    Dim g As Integer



    If gmDezimal >= 1 Then
    f!Anzeige = f!Anzeige + z / (10 ^ gmDezimal)

    gmDezimal = gmDezimal + 1

    Else
    f!Anzeige = z + 10 * f!Anzeige
    End If







    End Function



    Function rad() '*******************
    '** Wurzelziehen **
    '*******************


    Dim x As Form


    Set x = Forms!Taschenrechner



    x!zeichen = "rad"

    x!operator = x!operator & Sqr(x!Anzeige)


    x!Anzeige = ""


    End Function



    Function rechnen(q As String)
    Dim g As Integer



    '********************
    '** Rechnen **
    '********************


    Dim f As Form
    Set f = Forms!Taschenrechner


    gmDezimal = 0
    If f!operator = 0 Or f!operator = "" Or f!operator = Null Then
    f!operator = f!Anzeige & q
    Else
    f!operator = f!operator & f!Anzeige & q
    End If
    f!Anzeige = 0





    End Function








    Function result()

    Dim f As Form


    Dim str_Rechnen As String ' Länge der Zeichenfolge
    Dim arr_Rechnen() As String 'Array
    Dim len_Rechnen As Long 'Langzahlen
    Dim operand As Boolean 'Zahl oder Rechenzeichen
    Dim arr_Position As Integer 'Zahlen
    Dim i As Integer 'Variable definieren
    Dim msg As String
    Dim o As Integer 'Variable definieren


    Set f = Forms!Taschenrechner
    f!operator = f!operator & f!Anzeige 'weiterführende Rechnung
    str_Rechnen = f!operator 'Ganze Rechnung?
    ReDim arr_Rechnen(len_Rechnen)


    arr_Position = 0 'Anfang
    For i = 1 To len_Rechnen
    If i = 1 Or Mid(str_Rechnen, i, 1) = "," Then 'ertes Zeichen oder "," gehört immer zum operand deshalb operand immer True
    operand = True
    ElseIf operand = False Then 'Rechenzeichen
    operand = True ' nach einem operator kommt immer ein operand
    arr_Position = arr_Position + 1 'Ein Schritt weiter
    Else
    operand = IsNumeric(Mid(str_Rechnen, i, 1)) 'wird überprüft ob Zeichen Zahl ist
    End If

    If operand = True Then 'Dezimalzahl festlegen
    If Mid(str_Rechnen, i, 1) = "," Then 'wenn ein komma getippt wird
    arr_Rechnen(arr_Position) = arr_Rechnen(arr_Position) & "." 'Dann mit Punkt statt Komma rechnen
    Else
    arr_Rechnen(arr_Position) = arr_Rechnen(arr_Position) & Mid(str_Rechnen, i, 1) 'Wenn Zeichen eine Zahl dann ist sie dem gleichen Array angefügt
    End If
    Else 'ist ein operator Array wir um 1 erhöht und operator dem Array zugefügt
    arr_Position = arr_Position + 1 'Ein Schritt weiter wenn kein Komma
    arr_Rechnen(arr_Position) = Mid(str_Rechnen, i, 1)
    End If
    Next i
    'Ausgabe zur Überprüfung des Arrays
    For i = 0 To arr_Position
    msg = msg & i & ": " & arr_Rechnen(i) & vbCrLf
    Next i
    Debug.Print (msg)
    '*******
    For i = 0 To arr_Position 'In dieser Schleife wird die Rechung gurchgeführt
    If arr_Rechnen(i) = "*" Or arr_Rechnen(i) = "/" Then 'Wegen punkt vor strich muss zuerst * oder / gerechnet werden wenn das zutrifft, nimmt er den operand vor und nachdem operator und rechnet
    'danach wird das Ergebnis auf die Position auf des ersten Operanten ins Array geschrieben
    If arr_Rechnen(i) = "*" Then
    o = i - 1
    Do Until arr_Rechnen(o) <> "" 'Wenn Operant = "" dann ArrPosition zurück
    o = o - 1
    Loop
    arr_Rechnen(o) = Str(Val(arr_Rechnen(o)) * Val(arr_Rechnen(i + 1)))
    arr_Rechnen(i) = ""
    arr_Rechnen(i + 1) = ""
    Else
    o = i - 1
    Do Until arr_Rechnen(o) <> ""
    o = o - 1
    Loop
    arr_Rechnen(o) = Str(Val(arr_Rechnen(o)) / Val(arr_Rechnen(i + 1)))
    arr_Rechnen(i) = ""
    arr_Rechnen(i + 1) = ""
    End If
    End If
    Next i
    For i = 0 To arr_Position
    msg = msg & i & ": " & arr_Rechnen(i) & vbCrLf
    Next i
    Debug.Print (msg)
    For i = 0 To arr_Position
    If arr_Rechnen(i) = "+" Or arr_Rechnen(i) = "-" Then
    If arr_Rechnen(i) = "+" Then
    o = i - 1
    Do Until arr_Rechnen(o) <> ""
    o = o - 1
    Loop
    arr_Rechnen(o) = Str(Val(arr_Rechnen(o)) + Val(arr_Rechnen(i + 1)))
    arr_Rechnen(i) = ""
    arr_Rechnen(i + 1) = ""
    Else
    o = i - 1
    Do Until arr_Rechnen(o) <> ""
    o = o - 1
    Loop
    arr_Rechnen(o) = Str(Val(arr_Rechnen(o)) - Val(arr_Rechnen(i + 1)))
    arr_Rechnen(i) = ""
    arr_Rechnen(i + 1) = ""
    End If
    End If
    Next i
    For i = 0 To arr_Position
    msg = msg & i & ": " & arr_Rechnen(i) & vbCrLf
    Next i
    Debug.Print (msg)


    f!Anzeige = Val(arr_Rechnen(o))




    'Case "*": f!Anzeige = f!Anzeige * f!operator


    'f!operator = ""


    'End Select
    'f!operator = 0








    End Function



    Function plusminus()
    '***********************
    '** Vorzeichen ändern **
    '***********************


    Dim f As Form


    Set f = Forms!Taschenrechner


    f!Anzeige = f!Anzeige * (-1)


    End Function





    Function komma()




    Debug.Print gmDezimal



    If gmDezimal = 0 Then


    gmDezimal = 1

    End If


    End Function



    Function Back()
    '*********************
    '** Ziffern löschen **
    '*********************



    Dim f As Form


    Set f = Forms!Taschenrechner



    Debug.Print gmDezimal






    If gmDezimal >= 2 Then




    f!Anzeige = f!Anzeige * 10 ^ (gmDezimal - 2)
    f!Anzeige = Int(f!Anzeige)
    f!Anzeige = f!Anzeige / 10 ^ (gmDezimal - 2)

    gmDezimal = gmDezimal - 1


    Else


    f!Anzeige = Int(f!Anzeige / 10)

    gmDezimal = 0




    End If



    End Function





    Function Taxplus() '********************
    '** Plus Steuer **
    '********************




    Dim f As Form


    Set f = Forms!Taschenrechner


    f!Anzeige = f!Anzeige + f!Anzeige * (19 / 100)




    End Function








    Function Taxminus()
    '********************
    '** minus Steuer **
    '********************



    Dim f As Form


    Set f = Forms!Taschenrechner

    f!Anzeige = f!Anzeige - f!Anzeige * (19 / 100)



    End Function






    Function Memoryplus()
    '****************************************
    '** Addition des vorherigen Ergebnis **
    '****************************************



    Dim x As Form


    Set x = Forms!Taschenrechner



    x!memoryfield = x!operator


    x!Anzeige = x!Anzeige + x!memoryfield





    End Function








    Function Memoryminus()


    '*******************************************
    '** Subtraktion des vorherigen Ergebnis **
    '*******************************************



    Dim x As Form


    Set x = Forms!Taschenrechner



    x!memoryfield = x!operator


    x!Anzeige = x!Anzeige - x!memoryfield





    End Function




    Function memoryclear()
    '****************************************
    '** Löschen des vorherigen Ergebnis **
    '****************************************




    Dim x As Form


    Set x = Forms!Taschenrechner



    x!memoryfield = 0







    End Function




    Function etod()
    '****************************************
    '** Euro Dollar Wechsel **
    '****************************************



    Dim x As Form
    Set x = Forms!Taschenrechner




    x!operator = x!Anzeige * 1.336



    End Function



    Function dtoe()


    '****************************************
    '** Dollar Euro Wechsel **
    '****************************************


    Dim x As Form
    Set x = Forms!Taschenrechner


    x!operator = x!Anzeige / 1.336


    End Function









    Function hoch3()


    '****************************************
    '****** Potenz hoch 3 ******
    '****************************************


    Dim x As Form


    Set x = Forms!Taschenrechner




    x!zeichen = "^3"


    x!operator = x!operator & x!Anzeige ^ 3
    x!Anzeige = ""



    End Function



    Function hoch2()


    '****************************************
    '****** Potenz hoch 2 ******
    '****************************************




    Dim x As Form


    Set x = Forms!Taschenrechner




    x!zeichen = "^2"


    x!operator = x!operator & x!Anzeige ^ 2
    x!Anzeige = ""


    End Function



    Function hochx()


    '****************************************
    '****** Potenz hoch x ******
    '****************************************


    Dim x As Form


    Set x = Forms!Taschenrechner
    x!zeichen = "x^y"
    x!operator = x!Anzeige


    x!Anzeige = 0




    End Function