[VBA] DateDiff-Funktion
#1
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
Top
#2
Hi,

kann ich nicht nachvollziehen. Einzig die fehlende Deklaration des book wird mir angezeigt!
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#3
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
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
Top
#4
Hi,

der Code läuft bei mir fehlerfrei durch -> Ich hab kein 
Option explicit
Top
#5
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
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#6
Danke euch allen!

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

Grüße
Jonas
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste