VBA Wertübergabe von Boolean Variable

  • Excel

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von S!ckOne.

    VBA Wertübergabe von Boolean Variable

    Moin,

    Ich hab ein kleines Problem, bei der Programmierung meines Taschenrechners(Programmiert in VBA Userform). Es gibt 3 TextBoxen In TextBox 1 und 2 werden die miteinander zu verechnenden Zahlen eingegeben und in der 3. wird das Ergebnis angezeigt. Nachdem ein Operator geklickt wurde soll die Eingabe in der 2 TextBox geschiehen Jetzt folgendes:

    Ich habe für die Buttons die Variable : Dim operatorclick As Boolean, dieser wird beim Click eines Operators auf True gesetzt.
    Habe also beim Additions button :

    Public Sub Addition_Click()

    operatorclick = True
    If operatorclick = True Then
    TextBox2.SetFocus
    TextBox1.Enabled = False

    Soweit sogut, nur werden die Zahlen dennoch in Textbox1 geschrieben, der Debugger zeigt mir das in Zahl 1 der Wert vom operatorclick nicht auf True gesetzt wurde ( Also der Wert(true) von der variable wurde nicht in die folgenden Subs übernommen) Jetzt ist die Frage, was ich machen muss damit der Wert übernommen wird? Und noch hier der Code von Zahl1 :

    Public Sub Zahl1_Click()

    zahlclick = "1"

    If operatorclick = True Then
    TextBox2.Text = TextBox2.Text + zahlclick
    Else
    TextBox1.Text = TextBox1.Text + zahlclick
    End If
    Ich habe das Programmdesign deines Taschenrechners nicht so richtig verstanden, vielleicht kannst du das noch verfeinern.
    Wo steht der Code? In einer Form oder in einem Sheet?
    Wo ist operatorclick definiert?
    Kannst du mal den kompletten relevanten Code veröffentlichen?
    Und bitte verwende dafür VB-Tags!
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ich würde dir als erstes dringend raten, dich etwas mit Datentypen auseinander zu setzen. Auch wenn dir VBA da vieles implizit konvertiert rechnet man nicht mit Strings! Beim Zusammensetzen der Zahlen für Textbox1 mag das rauskommen was du möchtest ->
    "1" + "3" = "13".
    Aber beim Rechnen sollte doch 1+3=4 sein.

    Die Variable Opertatorclick muss innerhalb der Userform deklariert werden (also nicht innerhalb einer Methode(Sub)), damit du in allen Methoden drauf zugreifen kannst.
    Das ist meine Signatur und sie wird wunderbar sein!
    @petaod


    Der Code steht in einer Form und operatorclick ist in der userform definiert, ich poste einfach mal den Code vom Rechner. Und nicht wundern, der ist noch nicht ganz fertig :D Und beim Gleich ist das bewusst als Kommentar gesetzt weil ich das erst ausprobieren will wenn mit den TextBoxes alles klappt

    Und @Mono

    Ja, ich habe operatorclick in der Userform deklariert und die zahlen sind doch als Integer angegeben oder irre ich mich da ? Kannst dir ja mal den Code angucken ;)

    Public Sub Addition_Click()

    operatorclick = True
    If operatorclick = True Then
    TextBox2.SetFocus
    TextBox1.Enabled = False

    End If

    rechenart = addieren

    End Sub

    Private Sub Clear_Click()

    operatorclick = False
    TextBox1.Value = ""
    TextBox2.Value = ""
    TextBox3.Value = ""
    TextBox1.Enabled = True
    TextBox1.SetFocus
    End Sub

    Private Sub Division_Click()

    operatorclick = True
    If operatorclick = True Then
    TextBox2.SetFocus
    TextBox1.Enabled = False

    rechenart = Division

    End If

    End Sub

    Private Sub Gleich_Click()

    'If Rechenart = addieren Then
    'TextBox1.Value TextBox2.Value = TextBox3.Value
    'ElseIf Rechenart = subtrahieren Then
    'Textbox1.Value -Textbox2.Value = Textbox3.Value
    'ElseIf Rechenart = dividieren Then
    'Textbox1.Value / Textbox2.Value = Textbox3.Value
    'ElseIf Rechenart = multiplizieren Then
    'Textbox1.Value * Textbox2.Value = Textbox3.Value

    End Sub

    Private Sub Multiplikation_Click()

    operatorclick = True
    If operatorclick = True Then
    TextBox2.SetFocus
    TextBox1.Enabled = False

    rechenart = multiplizieren

    End If

    End Sub

    Private Sub Subtraktion_Click()

    operatorclick = True
    If operatorclick = True Then
    TextBox2.SetFocus
    TextBox1.Enabled = False

    rechenart = subtrahieren

    End If

    End Sub

    Private Sub TextBox1_Change()

    If plusclick = False Then

    TextBox1.Text = TextBox1.Text + zahlclick

    End Sub

    Private Sub TextBox3_Change()

    End Sub

    Private Sub TextBox2_Change()

    If plusclick = True Then
    TextBox2.Text = TextBox2.Text + zahlclick

    End If
    End Sub

    Public Sub UserForm_Click()

    Dim rechenart As String
    Dim addieren As String
    Dim subtrahieren As String
    Dim dividieren As String
    Dim multiplizieren As String
    Dim zahlclick As Integer
    Dim Ergebnis As Integer
    Dim operatorclick As Boolean

    End Sub

    Private Sub Zahl0_Click()

    zahlclick = "0"
    If operator = "+" Then
    TextBox2.Text = TextBox2.Text + zahlclick
    Else
    TextBox1.Text = TextBox1.Text + zahlclick
    End If

    End Sub

    Public Sub Zahl1_Click()

    zahlclick = "1"

    If operatorclick = True Then
    TextBox2.Text = TextBox2.Text + zahlclick
    Else
    TextBox1.Text = TextBox1.Text + zahlclick
    End If

    End Sub

    Private Sub Zahl2_Click()

    zahlclick = "2"

    If operatorclick = True Then
    TextBox2.Text = TextBox2.Text + zahlclick
    Else
    TextBox1.Text = TextBox1.Text + zahlclick
    End If

    End Sub

    Private Sub Zahl3_Click()

    zahlclick = "3"

    If operatorclick = True Then
    TextBox2.Text = TextBox2.Text + zahlclick
    Else
    TextBox1.Text = TextBox1.Text + zahlclick
    End If

    End Sub

    Private Sub Zahl4_Click()

    zahlclick = "4"

    If operatorclick = True Then
    TextBox2.Text = TextBox2.Text + zahlclick
    Else
    TextBox1.Text = TextBox1.Text + zahlclick
    End If

    End Sub

    Private Sub Zahl5_Click()

    zahlclick = "5"

    If operatorclick = True Then
    TextBox2.Text = TextBox2.Text + zahlclick
    Else
    TextBox1.Text = TextBox1.Text + zahlclick
    End If

    End Sub

    Private Sub Zahl6_Click()

    zahlclick = "6"

    If operatorclick = True Then
    TextBox2.Text = TextBox2.Text + zahlclick
    Else
    TextBox1.Text = TextBox1.Text + zahlclick
    End If

    End Sub

    Private Sub Zahl7_Click()

    zahlclick = "7"

    If operatorclick = True Then
    TextBox2.Text = TextBox2.Text + zahlclick
    Else
    TextBox1.Text = TextBox1.Text + zahlclick
    End If

    End Sub

    Private Sub Zahl8_Click()

    If operatorclick = True Then
    TextBox2.Text = TextBox2.Text + zahlclick
    Else
    TextBox1.Text = TextBox1.Text + zahlclick
    End If

    End Sub

    Private Sub Zahl9_Click()

    zahlclick = "9"

    If operatorclick = True Then
    TextBox2.Text = TextBox2.Text + zahlclick
    Else
    TextBox1.Text = TextBox1.Text + zahlclick
    End If

    End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „S!ckOne“ ()

    Nett das du meinen Post ignoriert hast, dieser enthält alle relevanten Informationen.
    Und bitte packe den Code innerhalb von Codetags hier im Forum (Die 2 Buttons im Editor mit VB 6.0 bzw VB.NET, such dir einen aus)

    Variablen die du global verwenden willst musst du in der Userform definieren, NICHT INNERHALB EINER METHODE.

    Visual Basic-Quellcode

    1. Public Sub UserForm_Click()
    2. Dim rechenart As String
    3. Dim addieren As String
    4. Dim subtrahieren As String
    5. Dim dividieren As String
    6. Dim multiplizieren As String
    7. Dim zahlclick As Integer
    8. Dim Ergebnis As Integer
    9. Dim operatorclick As Boolean
    10. End Sub


    All diese Variablen sind NUR INNERHALB DIESER METHODE "Sub UserForm_Click" gültig. Schreibe Sie AUßERHALB von einer Methode:

    Visual Basic-Quellcode

    1. Option Explicit
    2. Dim rechenart As String
    3. Dim addieren As String
    4. Dim subtrahieren As String
    5. Dim dividieren As String
    6. Dim multiplizieren As String
    7. Dim zahlclick As Integer
    8. Dim Ergebnis As Integer
    9. Dim operatorclick As Boolean
    10. Sub Iwas()
    11. End Sub


    Du scheinst ein richtiger Anfänger zu sein, daher rate ich nochmal DRINGEND dir zumindest die Basis Datentypen anzuschauen bzw. die Definition was Datentypen sind. Dies ist die wichtigste Grundlage für Programmieren. Das ist wie wenn du versuchst zu rechnen und die Grundoperatoren nicht unterscheiden kannst. Dabei kann kein richtiges Ergebnis rauskommen.

    //EDIT aufgrund des Edits von @S!ckOne:

    Du hast vielleicht einen Integer definiert.
    Aber 1. setzt du ihn mit einem String:

    Visual Basic-Quellcode

    1. zahlclick = "1"

    Alles mit "" ist ein String.
    2. Rechnest du dann mit einem String und Integer:

    Visual Basic-Quellcode

    1. TextBox2.Text = TextBox2.Text + zahlclick


    Was soll da passieren? TextBox2.Text ist ein String, zahlklick ein Integer. Stringverkettung wäre
    "4" + "1" = "41". Integer wäre 4+1 = 5.

    Wenn der erste String eine Zahl ist, wird vermutlich implizit in Integer konvertiert und du erhältst 4+1=5. Wenn ich dein Vorhaben richtig verstehe möchtest du doch aber vermutich das die Zahlen aneinander gehangen werden wie beim Taschenrechner und nicht addiert werden?
    Das ist meine Signatur und sie wird wunderbar sein!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Mono“ ()

    @Mono Erstmal danke für die umfangreiche Antwort, habe deine Antwort nicht ignoriert sondern bin mit den Antworten chronologisch vorgegangen angefangen mit petaoda ;)
    Ach und btw. ja ich bin ein "richtiger" Anfänger in VBA

    Also wenn ich das richtig verstanden habe muss ich die variablen in den jeweiligen Subs definieren und die TextBoxen müssen Integer sein also erstelle ich eine variable für die TextBox As Integer z.b



    Dim OperantEins As Integer
    OperantEins = Textbox1.Text


    ​Also wenn ich das richtig verstanden habe muss ich die variablen in den jeweiligen Subs definieren und die TextBoxen müssen Integer sein also erstelle ich eine variable für die TextBox As Integer z.b


    Nein.
    Du musst die Variable, die du global verwenden willst AUßERHALB der Subs definieren.

    Offenbar hast du gar nicht verstanden was ich geschrieben habe. Lies es dir nochmal genau durch. Ganz langsam. Und wenn du eine Passage nicht verstehst, dann frag was damit gemeint ist. Man kann Datentypen auch ineinander konvertieren. In VBA mit CSTR() für Umwandlung nach String, CINT() für Umwandlung nach Integer.
    Das ist meine Signatur und sie wird wunderbar sein!
    @Mono

    Achso ich denke ich weiß jetzt wie es gemeint ist, da gibt es allerdings eine Schwierigkeit undzwar soll der Wert des operatorclick nur auf true gesetzt werden wenn ein entsprechender operator angeclickt wurde, Aber ich kann ja nicht schreiben If Addition_Click = True Then operatorclick = True

    Aber in diesem Sinne sollte die Globale Variable funktionieren, ich denke das würde das Problem lösen