Makro:Kalenderdaten in Liste umbauen

Aus XIMES

Wechseln zu: Navigation, Suche

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


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
Persönliche Werkzeuge