Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CheckBox
BildScreenshot zu CheckBox CheckBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen

Datumsbereich mit UserForm Auswählen

Betrifft: Datumsbereich mit UserForm Auswählen von: Holger
Geschrieben am: 01.09.2020 11:58:58

Guten Morgen,


ich habe ein für mich großes Problem.

Ich möchte über eine UserForm

einen Mitarbeiter auswählen dann einen Zeitraum auswählen.

In diesem Zeitraum möchte ich an Arbeitstagen Urlaub (U) bzw. Krank (K) oder Überstunden (ÜB) abfeiern

eintragen. Es darf aber kein Sonntag und auch Feiertag genommen werden. (Ist ja eigentlich logisch)

Da wir Samstags auch arbeiten ist Samstag ein ganznormaler Arbeitstag.

Die UserForm mit den entsprechenden Felder habe ich schon erstellt, nur der Code der die eingaben ins Blatt bringt überfordert meine Kenntnisse.

Eine Beispiel Datei zum besseren verständniss habe ich hochgeladen.


https://www.herber.de/bbs/user/139966.xlsm


Vielen Dank

Betrifft: AW: Datumsbereich mit UserForm Auswählen
von: Rudi Maintaire
Geschrieben am: 01.09.2020 12:29:53

als Ansatz:
Sub aaaa()
  For dasDatum = vonDatum To bisDatum
    If dasDatum Mod 7 <> 1 Then  'kein Sonntag
      If Not istFeiertag(dasDatum) Then
        'eintragen
      End If
    End If
  Next d
End Sub

Function istFeiertag(datum) As Boolean
  Dim d As Integer, iJahr As Integer, OSo As Date
  iJahr = Year(datum)
  d = (((255 - 11 * (iJahr Mod 19)) - 21) Mod 30) + 21
  OSo = DateSerial(iJahr, 3, 1) + d + (d > 48) + 6 - ((iJahr + iJahr \ 4 + d + (d > 48) + 1)  _
Mod 7)
  Select Case datum
     Case OSo - 2, _
          OSo + 1, _
          OSo + 39, _
          OSo + 50, _
          OSo + 60, _
          DateSerial(iJahr, 1, 1), _
          DateSerial(iJahr, 5, 1), _
          DateSerial(iJahr, 10, 3), _
          DateSerial(iJahr, 11, 1), _
          DateSerial(iJahr, 12, 25), _
          DateSerial(iJahr, 12, 26)
      istFeiertag = True
  End Select
  'Karfreitag=Ostersonntag-2
  'Ostermontag=Ostersonntag+1
  'Chr.Himmelfahrt=Ostersonntag+39
  'Pfingstmontag=Ostersonntag+50
  'Fronleichnam=Ostersonntag+60
End Function

Gruß
Rudi

Betrifft: AW: Datumsbereich mit UserForm Auswählen
von: Holger
Geschrieben am: 01.09.2020 12:37:41

Hi Rudi Maintaire

vielen dank für deine Mühe, leider weiß ich nicht wie ich den Code in meine UserForm einfügen kann.
Könntest du es mir erklären.

Vielen dank noch mal

Betrifft: AW: Datumsbereich mit UserForm Auswählen
von: Holger
Geschrieben am: 01.09.2020 16:08:45

Leider bin ich noch nicht weiter gekommen,
da reichen meine Kenntnisse nicht :-)

Betrifft: AW: Datumsbereich mit UserForm Auswählen
von: Rudi Maintaire
Geschrieben am: 01.09.2020 16:42:45

in der UF:
Private Sub CommandButton1_Click()
  Dim lngColumn As Long, lngRow As Long
  lngColumn = ComboBox1.ListIndex + 25
  Dim dasDatum As Date, vonDatum As Date, bisDatum As Date
  lngRow = ComboBox2.ListIndex + 5
  vonDatum = ComboBox2
  bisDatum = ComboBox3
  For dasDatum = vonDatum To bisDatum
    If dasDatum Mod 7 <> 1 Then
      If Not istFeiertag(dasDatum) Then
        With Sheets("schichten").Cells(lngRow, lngColumn)
          Select Case ComboBox4
            Case "U", "ÜB": If LCase(.Value) <> "fs" Then .Value = ComboBox4
            Case "K": .Value = "K"
          End Select
        End With
      End If
    End If
    lngRow = lngRow + 1
  Next dasDatum
End Sub

In ein Modul:
Function istFeiertag(datum) As Boolean
  Dim d As Integer, iJahr As Integer, OSo As Date
  iJahr = Year(datum)
  d = (((255 - 11 * (iJahr Mod 19)) - 21) Mod 30) + 21
  OSo = DateSerial(iJahr, 3, 1) + d + (d > 48) + 6 - ((iJahr + iJahr \ 4 + d + (d > 48) + 1)  _
Mod 7)
  Select Case datum
     Case OSo - 2, _
          OSo + 1, _
          OSo + 39, _
          OSo + 50, _
          OSo + 60, _
          DateSerial(iJahr, 1, 1), _
          DateSerial(iJahr, 5, 1), _
          DateSerial(iJahr, 10, 3), _
          DateSerial(iJahr, 11, 1), _
          DateSerial(iJahr, 12, 25), _
          DateSerial(iJahr, 12, 26)
      istFeiertag = True
  End Select
  'Karfreitag=Ostersonntag-2
  'Ostermontag=Ostersonntag+1
  'Chr.Himmelfahrt=Ostersonntag+39
  'Pfingstmontag=Ostersonntag+50
  'Fronleichnam=Ostersonntag+60
End Function


Betrifft: AW: Datumsbereich mit UserForm Auswählen
von: Holger
Geschrieben am: 01.09.2020 19:11:44

Hi Rudi,

es läuft super.

vielen vielen Dank für dein Mühe.

Beiträge aus dem Excel-Forum zum Thema "Datumsbereich mit UserForm Auswählen"