ich habe gerade den nachfolgenden Code in der Entwicklung.
Wenn ich das Makro starte und die Variable lnDou mit der Function
Zulage füllen möchte, ändert sich der Typ der Variablen lvBeginn
von Objekt in Date? Und zwar nachdem die Funktion Zulage in der
Zeile "ldXVon = TimeSerial(lvIndex.Offset(0, 1) * 24, 0, 0)"
gewesen ist.
Wie kommt das denn wohl ?
Gruss aus Hannover
Kladeb
Option Explicit
Sub ZulagenBerechnen()
Dim loBereich As Range
Dim lvBeginn As Variant
Dim lnDou As Double
Set loBereich = ThisWorkbook.Sheets("Ist-Zeiten").Range("D5:D300")
For Each lvBeginn In loBereich
If Not lvBeginn + lvBeginn.Offset(0, 1) = 0 Then
lnDou = Zulage(lvBeginn, lvBeginn.Offset(0, 1))
lvBeginn.Offset(0, 2) = lnDou
End If
Next
End Sub
Function Zulage(ldVon, ldBis)
Dim loBlattVergütung As Range
Dim lvIndex As Variant
Dim ln0 As Integer, ln25 As Integer, ln40 As Integer
Dim lnStunden As Double
Dim ldX As Date, ldXVon As Date, ldXBis As Date
Dim lbStart As Boolean
Set loBlattVergütung = ThisWorkbook.Sheets("Vergütungstabelle").Range("A2:A49")
ldVon = TimeSerial(Hour(ldVon), Minute(ldVon), Second(ldVon))
ldBis = TimeSerial(Hour(ldBis), Minute(ldBis), Second(ldBis))
ldX = ldVon
For Each lvIndex In loBlattVergütung
ldXVon = TimeSerial(lvIndex.Offset(0, 1) * 24, 0, 0)
ldXBis = TimeSerial(lvIndex.Offset(0, 2) * 24, 0, 0)
If ldVon >= ldXVon And ldVon <= ldXBis Then
If lbStart = True Then
Exit For
Else
lbStart = True
End If
End If
If ldX >= ldXVon And ldX <= ldXBis Then
If ldXBis < ldBis Then
lnStunden = lnStunden + ((ldXBis - ldX) * 24)
Else
lnStunden = lnStunden + ((ldBis - ldX) * 24)
End If
ldX = IIf(ldXBis < ldBis, ldXBis, ldBis)
End If
Next
Zulage = lnStunden
End Function