Clever-Excel-Forum

Normale Version: [VBA] DateDiff-Funktion
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen!

Ich habe folgendes Problem. Ausgehend von einem Monatswert (Spalte 49) und der Eintrittsdatum (Spalte 4) sollen Sonderzuschläge berechnet werden. Dabei sollen zeilenweise die Werte ermittelt werden. Die Werte beruhen aus den verschiedenen Cases, die zutreffen. So wie der Code momentan aussieht ist er fehlerhaft. Hat jemand eine Idee?
Es wird mir die Zeile mit der Deklarierung des Eintritt als fehlerhaft angezeigt ("Anwensunds- oder objektdefinierter Fehler")



Sub Sonderzahlung()

Dim Zeile As Integer
Dim Sonderzahlung As Long
Dim Eintritt As Date, Heute As Date
Heute = Date
Zeile = 5
Eintritt = ActiveWorkbook.Worksheets("Gehaltsdaten").Cells(Zeile, 4)

Select Case DateDiff("m", Eintritt, Heute)
   
    Case Is < 6
        Sonderzahlung = 0
    Case 6 To 11
        Sonderzahlung = ActiveWorkbook.Worksheets("Gehaltsdaten").Cells(Zeile, 49) * 25 / 100
    Case 12 To 23
        Sonderzahlung = ActiveWorkbook.Worksheets("Gehaltsdaten").Cells(Zeile, 49) * 35 / 100
    Case 24 To 35
        Sonderzahlung = ActiveWorkbook.Worksheets("Gehaltsdaten").Cells(Zeile, 49) * 45 / 100
    Case Else
        Sonderzahlung = ActiveWorkbook.Worksheets("Gehaltsdaten").Cells(Zeile, 49) * 55 / 100
End Select

Set book = ActiveWorkbook
While (book.Worksheets("Gehaltsdaten").Cells(Zeile, 1) <> "")
book.Worksheets("Gehaltsdaten").Cells(Zeile, 51) = Sonderzahlung

Zeile = Zeile + 1

Wend

End Sub
Hi,

kann ich nicht nachvollziehen. Einzig die fehlende Deklaration des book wird mir angezeigt!
Bin grad nicht ganz sicher:

Select Case WorksheetFunction.DateDiff(Eintritt, Heute, "M") oder
Select Case WorksheetFunction.DateDif(Eintritt, Heute, "M")

falls VBA DateDif nativ nicht kennen sollte
Hi,

der Code läuft bei mir fehlerfrei durch -> Ich hab kein 
Option explicit
Hi,

ich kann auch nicht nachvollziehen, warum der Code nicht laufen soll. Man könnte ihn aber etwas abwandeln:


Code:
Sub Sonderzahlung()

Dim Zeile As Integer
Dim Sonderzahlung As Long
Dim Eintritt As Date

Zeile = 5
With ActiveWorkbook
Eintritt = .Worksheets("Gehaltsdaten").Cells(Zeile, 4)

Select Case DateDiff("m", Eintritt, Date)
   
    Case Is < 6
        Sonderzahlung = 0
    Case 6 To 11
        Sonderzahlung = 25
    Case 12 To 23
        Sonderzahlung = 35
    Case 24 To 35
        Sonderzahlung = 45
    Case Else
        Sonderzahlung = 55
End Select
Sonderzahlung = .Worksheets("Gehaltsdaten").Cells(Zeile, 49) / 100 * Sonderzahlung

While .Worksheets("Gehaltsdaten").Cells(Zeile, 1) <> ""
.Worksheets("Gehaltsdaten").Cells(Zeile, 51) = Sonderzahlung

Zeile = Zeile + 1

Wend
End With
End Sub
Danke euch allen!

Da hatte ich wohl was verdreht, kann es mir auch gerade nicht mehr erklären.

Grüße
Jonas