Makro:Kalenderdaten in Liste umbauen
Aus XIMES
Inhaltsverzeichnis |
Was tut es?
Das folgende Makro führt Daten in der Struktur
' Spalte B Spalte C Spalte D ' 7.9.06 22:00 ' 8.9.06 8:00 ' .... bedeutdet Nachtschicht vom 22:00-8:00
in eine entsprechende Liste um. Es kann auch Zusatzdaten in einer weiteren Spalte dabei berücksichtigen. ZB Pausenzeiten.
Es wird ein AUSGABEBLATT verwendet.
Zusätzlich erforderlich sind
- Basisfunktionen Makro:IsTime und MakeTime
Main
Option Explicit
Public Sub HoleWerteAusKalenderUndStelleSieFürRAS_aufbereiter__Auf_Sheet()
'HINTERGRUND: Zeitdaten Kommen in verschiedensten Formaten daher
'Hier werden Kalenderdaten umgebaut, in ein Forat das RAS lesen kann
'
Dim SH_From As Worksheet
Dim SH_To As Worksheet
Dim Row_Date As Range
Dim Row_fromTime As Range
Dim Row_toTime As Range
Dim Row_extra As Range
Dim i As Integer
Dim Semantik As String
Dim help1, help2 As Double
'
Dim RASRow As Integer
Dim TagNr As Integer '... Nummer des Tages
'
Dim tageswechsel As Integer
Dim printVonBis As Boolean
Dim Datum As Variant
Dim TimeVon As Double
Dim TimeBis As Double
'
'
Set SH_From = Worksheets("Work") '<<ANPASSEN
Set SH_To = Worksheets("Result") '<<ANPASSEN
'
SH_To.Cells.ClearContents
'
Set Row_Date = Range("B:B") '<<ANPASSEN DATUM
Set Row_fromTime = Range("C:C") '<<ANPASSEN
Set Row_toTime = Range("D:D") '<<ANPASSEN
Set Row_extra = Range("E:E") '<<ANPASSEN ... Spalte mit ExtraInfo, nur erforderlich bei Semantik B
printVonBis = True '<<ANPASSEN wenn Von Länge gedruckt wird, dann false
'
Semantik = "B" '<<ANPASSEN
RASRow = 0
TagNr = 1
'
'In welchen Zeilen steht was
For i = 3 To 65 '<<ANPASSEN
'#####################
If Semantik = "A" Then
'Logik der Interpretation - Wie stehen Rohdaten da
If Row_Date(i) <> "" Then
If IsTime(Row_fromTime(i)) And IsTime(Row_toTime(i)) Then
' Spalte B Spalte C Spalte D
' 7.9.06 7:00 14:00
TimeVon = MakeTime(Row_fromTime(i))
TimeBis = MakeTime(Row_toTime(i))
If TimeVon < TimeBis Then tageswechsel = 0 Else tageswechsel = 1
Call printMe(printVonBis, RASRow, Row_Date(i), TimeVon, tageswechsel, TimeBis, "Arbeit", i, TagNr, SH_To)
ElseIf IsTime(Row_fromTime(i)) And IsTime(Row_toTime(i + 1)) Then
' Spalte B Spalte C Spalte D
' 7.9.06 22:00
' 8.9.06 8:00
' .... bedeutdet Nachtschicht vom 22:00-8:00
TimeVon = MakeTime(Row_fromTime(i))
TimeBis = MakeTime(Row_toTime(i + 1))
Call printMe(printVonBis, RASRow, Row_Date(i), TimeVon, 1, TimeBis, "Arbeit", i, TagNr, SH_To)
End If
TagNr = TagNr + 1
End If
End If
'#####################
If Semantik = "B" Then
'Logik der Interpretation - Wie stehen Rohdaten da
If Row_Date(i) <> "" Then
If IsTime(Row_fromTime(i)) And IsTime(Row_toTime(i)) Then
' Spalte B Spalte C Spalte D
' 7.9.06 7:00 14:00
' Schicht von 7:00 - 14:00
TimeVon = MakeTime(Row_fromTime(i))
TimeBis = MakeTime(Row_toTime(i))
Call printMe(printVonBis, RASRow, Row_Date(i), TimeVon, 0, TimeBis, "Arbeit", i, TagNr, SH_To)
TagNr = TagNr + 1
ElseIf IsTime(Row_fromTime(i)) And IsTime(Row_toTime(i + 1)) Then
' Spalte B Spalte C Spalte D Spalte E
' 7.9.06 11:00 Auswärtsruhe
' 8.9.06 8:00 "20:15 - 05:12
' .... bedeutdet Schicht von 11:00 - 20:15, und von 05:12-8:00, dazwischen
'
TimeVon = MakeTime(Row_fromTime(i))
TimeBis = MakeTime(Row_toTime(i + 1))
'
If Row_extra(i + 1) <> "" Then
Datum = Row_Date(i)
help1 = MakeTime(Left(Row_extra(i + 1), 5))
help2 = MakeTime(Right(Row_extra(i + 1), 5))
'
'Erster Arbeitsteil
If help1 > TimeVon Then tageswechsel = 0 Else tageswechsel = 1
Call printMe(printVonBis, RASRow, Datum, TimeVon, tageswechsel, help1, "Arbeit", i, TagNr, SH_To)
TagNr = TagNr + tageswechsel
Datum = Datum + tageswechsel
'
'Auswärtsruhe
If help2 > help1 Then tageswechsel = 0 Else tageswechsel = 1
Call printMe(printVonBis, RASRow, Datum, help1, tageswechsel, help2, "Pause", i, TagNr, SH_To)
TagNr = TagNr + tageswechsel
Datum = Datum + tageswechsel
'
'2.Arbeitsteil
If TimeBis > help2 Then tageswechsel = 0 Else tageswechsel = 1
Call printMe(printVonBis, RASRow, Datum, help2, tageswechsel, TimeBis, "Arbeit", i, TagNr, SH_To)
TagNr = TagNr + tageswechsel
Datum = Datum + tageswechsel
'
Else
' Spalte B Spalte C Spalte D
' 7.9.06 22:00
' 8.9.06 8:00
' .... bedeutdet Nachtschicht vom 22:00-8:00
Call printMe(printVonBis, RASRow, Row_Date(i), TimeVon, 1, TimeBis, "Arbeit", i, TagNr, SH_To)
End If
'
Else
TagNr = TagNr + 1
End If
'
End If
End If
'
Next
'
End Sub
PrittyPrint
Private Sub printMe(printVonBis As Boolean, Nr As Integer, Datum As Variant, von As Variant, tageswechsel As Integer, bis As Variant, text As String, zeileNr As Integer, TagNr As Integer, ResultSh As Worksheet)
'Spalten Sind nicht durchgängig nummeriert, weil in RAS Leerspalten
'
If printVonBis Then
Nr = Nr + 1
'
ResultSh.Cells(Nr, 1) = Format(Datum, "DD.MM.YYYY")
ResultSh.Cells(Nr, 3) = Format(von, "HH:mm")
ResultSh.Cells(Nr, 5) = Format(Datum + tageswechsel, "DD.MM.YYYY")
ResultSh.Cells(Nr, 7) = Format(bis, "HH:mm")
'Warnung
If tageswechsel + bis - von > 1 Then
'Länge mehr als 24:00 ... sehr eigenartig
ResultSh.Cells(Nr, 12) = "Achtung: plus " & Int(tageswechsel + bis - von) & " TAG(E)"
End If
'
ResultSh.Cells(Nr, 11) = text
'
Else
'Vorbereitet für Kopie in Von/Länge
'
Nr = Nr + 1
'
ResultSh.Cells(Nr, 1) = TagNr
ResultSh.Cells(Nr, 2) = Format(von, "HH:mm")
ResultSh.Cells(Nr, 4) = Format(tageswechsel + bis - von, "HH:mm")
'Warnung
If tageswechsel + bis - von > 1 Then
'Länge mehr als 24:00 ... sehr eigenartig
ResultSh.Cells(Nr, 7) = "Achtung: plus " & Int(tageswechsel + bis - von) & " TAG(E)"
End If
'
ResultSh.Cells(Nr, 6) = text
'
End If
End Sub
