Schaltflächen programmieren für Addition

  • Excel

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Schaltflächen programmieren für Addition

    Hallo,

    ich hab ehrlich keine Ahnung von Visual Basic, jedoch benötige ich jetzt ein paar Zeilen Code und hoffe hier wird mir weiter geholfen.

    Ich habe folgende Problemstellung: Ich muss eine einfache Bestandsverwaltung erstellen. (siehe Bild)

    Sobald man auf den Button drückt, soll die Buchungsmenge dem Bestand addiert oder subtrahiert werden. Jedoch nur wenn auch eine Buchungsmenge vorhanden ist (wird durch SVerweis zugeordnet)

    Danach soll die obere Artikelnummer und Menge gelöscht werden, für eine neue Eingabe.

    Ich weiss grob von Java wie man es anstellen könnte, die Zelle in eine Variable ziehen, dann Bestand addieren, jedoch wie gesagt VB ist Neuland für mich.

    Vielen Dank für eure Hilfe.
    Bilder
    • VB.png

      8,84 kB, 524×291, 165 mal angesehen

    Visual Basic-Quellcode

    1. Sub Button1_Click
    2. Dim zahl1 As Double ' "Neue Variable" Double = zahl1
    3. Dim zahl2 As Double ' "Neue Variable" Double = zahl2
    4. Dim zahl3 As Double ' "Neue Variable" Double = zahl3
    5. zahl1 = Range("C10").Value ' zahl1 = Zelle C10
    6. zahl1 = Cells(10,3).Value 'alternative Schreibweise
    7. zahl2 = Range"=B10").Value ' zahl2 = zahl2 = B10
    8. zahl3 = zahl1 + zahl2
    9. Range("B10").Value = zahl3 'Zelle B10 = zahl3
    10. End Sub

    Oder vereinfacht und ohne Umweg über die Variablen:

    Visual Basic-Quellcode

    1. Sub Button1_Click
    2. Range("B10").Value = Range("C10").Value + Range("B10").Value
    3. End Sub


    Dieser Code geht davon aus, dass sich der Button im Code-Modul des Worksheet befindet.
    Wenn du die Zelle in einem anderen Worksheet adressieren willst, geht das in etwa so:

    Visual Basic-Quellcode

    1. set ws = Worksheets("Tabelle1")
    2. ws.​Range("B10").Value = ws.Range("C10").Value + ws.Range("B10").Value

    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

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

    Bo0n schrieb:

    Der Debugger sagt mir es wäre diese Zeile: "zahl1 = Range("C10").Value ' zahl1 = Zelle C10"
    Zunächst: Dir ist schon klar, dass alles hinter dem Apostrophen Kommentar ist, der nur signalisiert, zu welchem deiner Pseudocodes diese Zeile gehört.

    Wenn bei ​zahl1 = Range("C10").Value eine Typenunverträglichkeit gemeldet wird, dann wird wohl in der Zelle ein Wert drin stehen, der nicht in Double konvertiert werden kann.
    Als Java-Programmierer wirst du ja wohl wissen, was Datentypen sind. Oder müssen wir ganz unten anfangen?

    Einen Lösungsansatz für dein Problem hat @FireEmerald schon geschrieben.
    Eine andere Möglichkeit wäre zahl1 = Val(Range("C10").Value)
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ja, Datentypen sind mir bekannt, auch dass man z.B. String zu Double parsen muss etc.

    Jetzt hätte ich noch eine Frage:

    Der Code funktioniert soweit. Kann ich jetzt eine Schleife erstellen, wo er die Artikelnummern durchgeht, und WENN eine Artikelnummer zu der eingegeben passt, soll er dort die Menge addieren.

    Ich kenne das aus Java mit einer Schleife, wo eine Variable immer (pro Zeile) hochgezählt wird, in einem gewissen Rahmen.

    Vielen Dank.

    Bo0n schrieb:

    Kann ich jetzt eine Schleife erstellen, wo er die Artikelnummern durchgeht, und WENN eine Artikelnummer zu der eingegeben passt, soll er dort die Menge addieren.
    Klar.
    Die Frage ist nur wo du die eingegebene Artikelnummer gespeichert hast und in welcher Spalte du sie suchen willst.

    Visual Basic-Quellcode

    1. ​For r = 1 To Cells(Rows.Count,1).End(xlUp).Row
    2. If Cells(r,1).Value = ArtikelNummer Then
    3. Cells(r,2).Value = Val(Cells(r,2).Value) + Val(Cells(r,3).Value)
    4. Exit For
    5. End If
    6. Next

    Schneller geht's aber ohne Schleife mit Find:

    Visual Basic-Quellcode

    1. ​Set c = Range("A:A").Find(Artikelnummer, LookIn:=xlValues, LookAt:=xlWhole)
    2. If Not c Is Nothing Then
    3. c.Offset(0,1).Value = Val(c.Offset(0,1).Value) + Val(c.Offset(0,2).Value)
    4. End If
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --