VBA-Excel Do-Schleife

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: VBA-Excel Do-Schleife
von: Rolle
Geschrieben am: 02.09.2015 14:36:07

Hallo zusammen,
ich bearbeite gerade ein Makro für eine Datenbank.
Das Makro soll wie folgt funktionieren.
Die Bestandsänderung wird in eine definierte Zelle eingetragen.
Daraufhin erscheint eine Messagebox, die abfragt ob die Eingabe korrekt war.
Bei Bestätigung wird der eingetragene Wert mit dem Bestand verrechnet, das Datum aktualisiert und Beides wird in eine Bestands-Historie kopiert.
Der Eintrag in der Historie sucht sich dabei immer die nächste leere Zelle aus.
Soweit funktioniert mein Code auch, jedoch wenn ich nun bei der Messagebox auf Abbrechen drücke bzw. bestätige, dass die Eingabe nicht korrekt war, löscht er zwar die Eingabe aber beendet auch komplett das Makro sprich eine erneute Eingabe ist nicht möglich. Ich vermute es stimmt etwas mit der Do-Schleife nicht aber finde auch nach langem Suchen den Fehler nicht x)
Vielen Dank!
https://www.herber.de/bbs/user/99972.xlsm
Hier der Code:
Do
'leeren der Zelle
If Target <> [G4] Then Exit Sub
Application.EnableEvents = False
Dim Wert01
Wert01 = Target
'Fenster Bestätigung
Dim Wert As Byte
Wert = MsgBox("Wert speichern?", 1, "Wert speichern")
If Wert = 1 Then GoTo sprungmarke2
If Wert = 2 Then GoTo sprungmarke
sprungmarke2:
'aktueller Bestand
[E4] = Wert01 + [E4]
Target = ""
Application.EnableEvents = True
'aktuelles Datum
[F4] = Date
'Auflistung
i = 4
Range("K4").Select
Do While Not ActiveCell.FormulaR1C1 = ""
i = i + 1
Range("K" & i).Select
Loop
ActiveCell.FormulaR1C1 = [E4]
Range("J" & i).Select
ActiveCell.FormulaR1C1 = Date
sprungmarke:
Range("G4").Select
Exit Do
Loop
End Sub

Bild

Betrifft: AW: VBA-Excel Do-Schleife
von: Rudi Maintaire
Geschrieben am: 02.09.2015 14:53:15
Hallo,
wen ich das richtig interpretiere:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$G$4" Then
    If MsgBox("Wert eintragen?", vbYesNo, "Frage") = vbYes Then
    On Error GoTo ERREXIT
    Application.EnableEvents = False
    Range("E4") = Range("E4") + Target
    Range("F4") = Date
    With Cells(Rows.Count, 10).End(xlUp)
      .Offset(1) = Date
      .Offset(1, 1) = Range("E4")
    End With
  End If
  Target.ClearContents
  Target.Select
  End If
ERREXIT:
  Application.EnableEvents = True
End Sub

Gruß
Rudi

Bild

Betrifft: AW: VBA-Excel Do-Schleife
von: Rolle
Geschrieben am: 02.09.2015 15:09:29
Schon mal vielen Dank Rudi! Ist schon mal ne effektivere Lösung als meine.
Jedoch erscheint bei deinem Code, sobald ich bei der Messagebox auf Nein drücke die Messagebox immer wieder erneut und verschwindet auch erst wenn ich auf ja drücke.
Ziel sollte sein, dass ich bei Betätigen des Nein-Buttons einen komplett neuen Wert in G4 eintragen kann und Dieser auch dann erst mit dem Bestand verrechnet und in die Historie eingetragen wird, sobald ich ja bei der Messagebox drücke.
Ich stelle mir die Messagebox als eine Art Sicherung vor dem Eintrag vor, einfach um Fehler zu vermeiden.
Gruß Rolle

Bild

Betrifft: AW: VBA-Excel Do-Schleife
von: Rudi Maintaire
Geschrieben am: 02.09.2015 15:15:46
Hallo,
kleine Korrektur:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$G$4" Then
    On Error GoTo ERREXIT
    Application.EnableEvents = False
    If MsgBox("Wert eintragen?", vbYesNo, "Frage") = vbYes Then
    Range("E4") = Range("E4") + Target
    Range("F4") = Date
    With Cells(Rows.Count, 10).End(xlUp)
      .Offset(1) = Date
      .Offset(1, 1) = Range("E4")
    End With
  End If
  Target.ClearContents
  Target.Select
  End If
ERREXIT:
  Application.EnableEvents = True
End Sub

Gruß
Rudi

Bild

Betrifft: AW: VBA-Excel Do-Schleife
von: Rolle
Geschrieben am: 02.09.2015 15:23:30
jaaaaaaa klappt super danke =)
Gruß Rolle

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Zeichen meherer Zellen vergleichen->Zellen färben"