Advertisement
Guest User

HalloFlo

a guest
Jun 24th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Option Explicit
  2.  
  3. 'Die Sub CalcHours soll eine MessageBox ausgeben welche eine Info ausgibt über:
  4. ' • Stunden die der Monteur gearbeitet hat
  5. ' • Die Anzahl an Sondertagen, in dieser Variante werden E-Stunden, Tarifurlaub und Krankheit ausgewertet.
  6.  
  7. 'Deklaration der Variablen erfolgt übergeordnet, da nur in Sub in dem Mod enthalten sein soll.
  8.  
  9. Dim rng_user As Range               'Range-Bereich der zum Auswerten ausgewählt wird
  10. Dim rng_CalcCell As Range           'Auszuwertende Zelle
  11. Dim str_Mont_Name As String         'Name des Monteurs
  12. Dim int_Mont_Stunden As Integer     'Auswertung aus allen Stunden
  13. Dim int_Mont_EStunden As Integer    'Auswertung aus "E" - E-Stunden
  14. Dim int_Mont_Urlaub As Integer      'Auswertung aus "T" - Tarifurlaub
  15. Dim int_Mont_Krank As Integer       'Auswertung aus "K" - Krankheit
  16. Dim int_Mont_ERT As Integer         'Auswertung aus "ERT" - Ersatzruhetage
  17.  
  18.  
  19.     Sub CalcHours()
  20.     On Error GoTo Safe 'Schmutzige Variante von Try/Catch/Except, um Fehler zu vermeiden.
  21.    
  22.     'Prüfung, ob die aktive Zelle ein ausgewählter Monteur ist.
  23.    'Um aufwendige Or-Verknüpfung zu vermeiden wird von dem inkrementalen Bereichsnamen das letzte Zeichen entfernt.
  24.    If Left(ActiveCell.Name.Name, Len(ActiveCell.Name.Name) - 1) = "MontName" Then
  25.            
  26.             str_Mont_Name = ActiveCell.Value 'Der Name des Monteurs wird auf basis der markierten Zelle gesetzt
  27.            Set rng_user = ActiveCell.Offset(0, 2).Range("A1:AE1") 'Der Bereich der Stunden wird als Offset in eine Range definiert
  28.            
  29.             Debug.Print "Ausgewählter Bereich:" & rng_user.AddressLocal
  30.            
  31.             'Die Schleife durchläuft jeden Wert des Ranges rng_user und setzt diesen als rng_CalcCell
  32.                For Each rng_CalcCell In rng_user
  33.                 'Debug.Print rng_CalcCell.PrintOut - Hallo Jürgen, dieser Befehl hat auf jedenfall Papier gekostet :)
  34.                Debug.Print "Zelleninhalt:" & rng_CalcCell.Value
  35.                
  36.                     'Prüfung ob der Zellenwert eine Zahl ist, wenn ja wird der Wert den Monteurstunden gutgeschrieben.
  37.                    'Ich verzichte auf Else weil es hier nicht notwendig ist, da ich explizit nur 4 Zustände abfrage und die Übersicht so besser ist.
  38.                    If IsNumeric(rng_CalcCell) Then int_Mont_Stunden = int_Mont_Stunden + rng_CalcCell
  39.                     If rng_CalcCell.Value = "E" Then int_Mont_EStunden = int_Mont_EStunden + 1
  40.                     If rng_CalcCell.Value = "T" Then int_Mont_Urlaub = int_Mont_Urlaub + 1
  41.                     If rng_CalcCell.Value = "K" Then int_Mont_Krank = int_Mont_Krank + 1
  42.                     If rng_CalcCell.Value = "ERT" Then int_Mont_ERT = int_Mont_ERT + 1
  43.                      
  44.                 Next rng_CalcCell
  45.                
  46.             Debug.Print "E-Stunden: " & int_Mont_EStunden
  47.             Debug.Print "Urlaub: " & int_Mont_Urlaub
  48.             Debug.Print "Krankheit: " & int_Mont_Krank
  49.            
  50.             'Ausgabe einer MessageBox mit den Informationen
  51.            MsgBox "Der Mitarbeiter " & str_Mont_Name & " hat in diesen Monat" & vbLf & _
  52.             "folgende Zusammensetzung von Stunden:" & vbLf & vbLf & _
  53.             "Arbeitsstunden: " & int_Mont_Stunden & vbLf & _
  54.             "E-Tage: " & int_Mont_EStunden & vbLf & _
  55.             "Urlaubstage: " & int_Mont_Urlaub & vbLf & _
  56.             "Krankheitstage: " & int_Mont_Krank, _
  57.             vbInformation, p_c_MsgBoxTitle
  58.  
  59.     Else
  60.     'Wenn die falsche Zelle ausgewählt ist oder der Code einen Laufzeitfehler erzeugt wird eine Messagebox mit Info ausgegeben.
  61. Safe:
  62.     MsgBox "Für Stundenauskunft bitte den Monteursnamen anklicken.", vbInformation, p_c_MsgBoxTitle
  63.     End If
  64.  
  65.     End Sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement