Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Option Explicit
- 'Die Sub CalcHours soll eine MessageBox ausgeben welche eine Info ausgibt über:
- ' • Stunden die der Monteur gearbeitet hat
- ' • Die Anzahl an Sondertagen, in dieser Variante werden E-Stunden, Tarifurlaub und Krankheit ausgewertet.
- 'Deklaration der Variablen erfolgt übergeordnet, da nur in Sub in dem Mod enthalten sein soll.
- Dim rng_user As Range 'Range-Bereich der zum Auswerten ausgewählt wird
- Dim rng_CalcCell As Range 'Auszuwertende Zelle
- Dim str_Mont_Name As String 'Name des Monteurs
- Dim int_Mont_Stunden As Integer 'Auswertung aus allen Stunden
- Dim int_Mont_EStunden As Integer 'Auswertung aus "E" - E-Stunden
- Dim int_Mont_Urlaub As Integer 'Auswertung aus "T" - Tarifurlaub
- Dim int_Mont_Krank As Integer 'Auswertung aus "K" - Krankheit
- Dim int_Mont_ERT As Integer 'Auswertung aus "ERT" - Ersatzruhetage
- Sub CalcHours()
- On Error GoTo Safe 'Schmutzige Variante von Try/Catch/Except, um Fehler zu vermeiden.
- 'Prüfung, ob die aktive Zelle ein ausgewählter Monteur ist.
- 'Um aufwendige Or-Verknüpfung zu vermeiden wird von dem inkrementalen Bereichsnamen das letzte Zeichen entfernt.
- If Left(ActiveCell.Name.Name, Len(ActiveCell.Name.Name) - 1) = "MontName" Then
- str_Mont_Name = ActiveCell.Value 'Der Name des Monteurs wird auf basis der markierten Zelle gesetzt
- Set rng_user = ActiveCell.Offset(0, 2).Range("A1:AE1") 'Der Bereich der Stunden wird als Offset in eine Range definiert
- Debug.Print "Ausgewählter Bereich:" & rng_user.AddressLocal
- 'Die Schleife durchläuft jeden Wert des Ranges rng_user und setzt diesen als rng_CalcCell
- For Each rng_CalcCell In rng_user
- 'Debug.Print rng_CalcCell.PrintOut - Hallo Jürgen, dieser Befehl hat auf jedenfall Papier gekostet :)
- Debug.Print "Zelleninhalt:" & rng_CalcCell.Value
- 'Prüfung ob der Zellenwert eine Zahl ist, wenn ja wird der Wert den Monteurstunden gutgeschrieben.
- 'Ich verzichte auf Else weil es hier nicht notwendig ist, da ich explizit nur 4 Zustände abfrage und die Übersicht so besser ist.
- If IsNumeric(rng_CalcCell) Then int_Mont_Stunden = int_Mont_Stunden + rng_CalcCell
- If rng_CalcCell.Value = "E" Then int_Mont_EStunden = int_Mont_EStunden + 1
- If rng_CalcCell.Value = "T" Then int_Mont_Urlaub = int_Mont_Urlaub + 1
- If rng_CalcCell.Value = "K" Then int_Mont_Krank = int_Mont_Krank + 1
- If rng_CalcCell.Value = "ERT" Then int_Mont_ERT = int_Mont_ERT + 1
- Next rng_CalcCell
- Debug.Print "E-Stunden: " & int_Mont_EStunden
- Debug.Print "Urlaub: " & int_Mont_Urlaub
- Debug.Print "Krankheit: " & int_Mont_Krank
- 'Ausgabe einer MessageBox mit den Informationen
- MsgBox "Der Mitarbeiter " & str_Mont_Name & " hat in diesen Monat" & vbLf & _
- "folgende Zusammensetzung von Stunden:" & vbLf & vbLf & _
- "Arbeitsstunden: " & int_Mont_Stunden & vbLf & _
- "E-Tage: " & int_Mont_EStunden & vbLf & _
- "Urlaubstage: " & int_Mont_Urlaub & vbLf & _
- "Krankheitstage: " & int_Mont_Krank, _
- vbInformation, p_c_MsgBoxTitle
- Else
- 'Wenn die falsche Zelle ausgewählt ist oder der Code einen Laufzeitfehler erzeugt wird eine Messagebox mit Info ausgegeben.
- Safe:
- MsgBox "Für Stundenauskunft bitte den Monteursnamen anklicken.", vbInformation, p_c_MsgBoxTitle
- End If
- End Sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement