Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema ListBox
BildScreenshot zu ListBox ListBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Problem bei Monatsaddierung

Betrifft: Problem bei Monatsaddierung von: Thomas
Geschrieben am: 13.08.2014 16:26:54

Hallo zusammen,

ich würde gerne eine Schaltfläche erzeugen, die auf Knopfdruck Monate hinzuaddiert und immer auf das Monatsende springt.
Leider schaffe ich es nur, die Monate hochzuzählen. Sobald Feburar erreicht ist und der 28. drinnen steht tut sich allerdings nichts mehr in die andere Richtung :(

Habt ihr da eine Idee?
Hier mein Versuch, allerdings funktioniert es so nicht. Dabei wird nämlich auch vom 28.Feburar subtrahiert.

  • Private Sub AbschlussWartung_Click()
    l = Cells(a, 2)
    m = Cells(a, 13)
    n = Cells(a, 4)
    k = MsgBox("Sicher das die Wartung abgeschlossen ist?", vbYesNo + vbQuestion, "Wartung abschließ _
    en")
        If k = vbNo Then
            Exit Sub
        Else
            Worksheets("Datenbank").Activate
            With ActiveSheet
                dtnewdate = DateAdd("m", m, l)
                Cells(a, 2) = dtnewdate
            End With
            With ActiveSheet
            ' nur Tage anpassen, wenn schaltjahr(februar) oder 6 monatige Prüfung
                        If Month(n) + Cells(a, 13) = 1 Or 3 Or 5 Or 7 Or 8 Or 10 Or 12 Then
                    o = DateSerial(Year(n), Month(n) + Cells(a, 13), Day(n) - 1)
                    Cells(a, 4) = o
                End If
                    If Month(n) + Cells(a, 13) = 4 Or 6 Or 9 Or 11 Then
                    o = DateSerial(Year(n), Month(n) + Cells(a, 13), Day(n) - 2)
                    Cells(a, 4) = o
                End If
                    If Month(n) + Cells(a, 13) = 2 Then
                    o = DateSerial(Year(n), Month(n) + Cells(a, 13), Day(n) - 5)
                    Cells(a, 4) = o
                End If
            With ActiveSheet
                e = Columns(1).Find(What:=ListBox1.Text, LookAt:=xlWhole).Row
                Wartung.Text = Cells(e, 2).Value
            End With
            With ActiveSheet
                f = Columns(1).Find(What:=ListBox1.Text, LookAt:=xlWhole).Row
                KarenzWartung.Text = Cells(f, 4).Value
            End With
           i = MsgBox("Änderungen gespeichert!", vbOKOnly, "Änderungen übernommen")
            Exit Sub
        End With
        End If
    End Sub



  • Vielen Dank schonmal!
    Gruß
    Thomas

      

    Betrifft: AW: Problem bei Monatsaddierung von: Tino
    Geschrieben am: 13.08.2014 18:10:29

    Hallo,
    versuch mal zu erklären was Du genau machen willst, am besten an einer Beispieldatei.

    Dein Code läuft bei mir so überhaupt nicht,
    keine Variablen deklariert, keine Werte zugeordnet usw…


    Gruß Tino


      

    Betrifft: AW: Problem bei Monatsaddierung von: Thomas
    Geschrieben am: 13.08.2014 18:44:24

    Hi,

    sorry, dass ich mich so kompliziert und ungenau ausgedrückt habe :(

    ich arbeite gerade an einer Übersichtsliste für unsere Geräte auf der Arbeit.
    Diese werden zum Teil jährlich, halbjährlich oder in einem anderen Zeitraum gewartet.
    Ich würde gerne einen Button einbauen, der nach Abschluss der Wartung in einer Textbox automatisch auf das nächste Wartungsdatum springt. Außerdem haben wir ein Karenzdatum (also bis wann die Wartung spätestens erledigt sein soll), dafür habe ich auch eine Textbox (hier ist das Problem mit dem Monatsende). Hier soll das gleiche passieren.

    https://www.herber.de/bbs/user/92082.xlsm

    Wäre echt cool, wenn mir da jemand weiter helfen könnte.
    Falls weitere Fragen sind, ich versuche mich so schnell und präzise wie möglich auszudrücken.

    Vielen Dank!

    Ich habe mal die wesentlichen Felder in eine neue Datei kopiert und angefügt.


      

    Betrifft: AW: Problem bei Monatsaddierung von: Tino
    Geschrieben am: 13.08.2014 19:16:56

    Hallo,
    wenn du den letzten Tag im Monat haben willst, könntest Du es so versuchen.

    Beispiel:

    Dim nDate As Date
    nDate = CDate(TextBox2)
    'letzter Tag im Monat
    nDate = DateSerial(Year(nDate), Month(nDate) + 1, 0)
    Dein Code in Deiner Tabelle läuft bei mir immer auf Fehler?!

    Gruß Tino


      

    Betrifft: AW: Problem bei Monatsaddierung von: Thomas
    Geschrieben am: 13.08.2014 19:19:16

    Ja, bei mir läuft er ja auch auf Fehler. Deshalb hab ich ja um Hilfe gebeten, aber ich versuchs jetzt nochmal.

    Danke!
    Falls du noch weitere Eingebungen hast, bin nicht abgeneigt ;-)


      

    Betrifft: AW: Problem bei Monatsaddierung von: Tino
    Geschrieben am: 13.08.2014 19:45:46

    Hallo,
    hier mal ein Code der das Datum vom Monatsende einträgt!

    kommt als Code in UserForm1

    Option Explicit 
     
    Private Sub UserForm_Activate() 
        With ActiveSheet 
            TextBox1.Text = Cells(2, 2).Value 
            TextBox2.Text = Cells(2, 4).Value 
        End With 
    End Sub 
     
    Private Sub CommandButton1_Click() 
    Dim DateWartung As Date, DateKarenz As Date 
    If IsDate(TextBox1) Then 
        If IsDate(TextBox2) Then 
            DateWartung = CDate(TextBox1) 
            DateKarenz = CDate(TextBox2) 
             
            Cells(2, 2).Value = DateSerial(Year(DateWartung), Month(DateWartung) + 1, 0) 
            Cells(2, 4).Value = DateSerial(Year(DateKarenz), Month(DateKarenz) + 1, 0) 
        Else 
            MsgBox "Fehler Datum Karenzzeit" 
        End If 
    Else 
        MsgBox "Fehler Datum Wartung" 
    End If 
    End Sub 
     
    Gruß Tino


      

    Betrifft: AW: Problem bei Monatsaddierung von: Thomas
    Geschrieben am: 13.08.2014 19:46:27

    Hi,

    habe das ganze nochmal überarbeitet:
    https://www.herber.de/bbs/user/92084.xlsm

    Jetzt sollte der Code funktionieren und mein Problem klar werden.
    Wenn ich von August auf Feburar springe klappt das noch mit dem Monatsende, allerdings von Feburar auf August bleibt der 28. stehen und im Schaltjahr funktioniert das auch nicht. (Das habe ich aber auch nicht berücksichtigt, habt ihr auch hier eine Idee?)

    Noch eine Frage könnt ihr mir erklären, wo der Fehler im Code ist, da die beiden Daten nicht beim aktivieren der UserForm angezeigt werden?

    Vielen Dank, hoffe jetzt ist es verständlich.

    Gruß
    Thomas


     

    Beiträge aus den Excel-Beispielen zum Thema "Problem bei Monatsaddierung"