VBA Excel [Alle Versionen] - Kalendersteuerung

VBA Excel [Alle Versionen] - Kalendersteuerung

Einführung

Das Kalendersteuerelement von VBA wurde zwischen Excel 2003 und Excel 2010 geändert. Die älteren Versionen haben ein Steuerelement mit dem Namen " Kalender ", und für die neuen Versionen wird es als " DT-Auswahl " -Steuerelement bezeichnet. Kompatibilitätsprobleme können auftreten, wenn Sie versuchen, Folgendes zu verwenden:
  • Arbeitsmappen mit dem Kalender-Steuerelement für die neuen Versionen von Excel
  • Arbeitsmappen mit DT Picker in der Vorgängerversion von Excel.

Ein weiteres Problem liegt in der verwendeten Version von Microsoft Office. Einige Unternehmenskonfigurationen erlauben keinen Zugriff auf das DT Picker-Steuerelement. Um dies zu beheben, schlage ich vor, dass Sie mithilfe eines Benutzerformulars Ihr eigenes Kalendersteuerelement erstellen.

Das UserForm

Das UserForm enthält:
  • 29 und 31 Befehlsschaltflächen für die "Tage".
  • Ein Label "Wahl des Monats".
  • 2 Tasten ("") zum Navigieren zwischen den Monaten.
  • Der aktuelle Monat und das aktuelle Jahr werden in der "Beschriftung" (Titel) des Benutzerformulars angezeigt.
  • Alle Steuerelemente in dieser UserForm werden dynamisch erstellt.

Fertig machen

Öffnen Sie Ihren VBA-Editor, erstellen Sie ein neues Benutzerformular und ändern Sie dessen Name-Eigenschaft in "Calendrier".

Kopieren Sie den folgenden Code in das Modul der UserForm:

 Option Explicit Private Sub UserForm_Initialize () Dim Obj als Steuerelement Dim i als Ganzzahl, Mois als Ganzzahl, Annee als Ganzzahl Dim Cl als Klasse1 LABEL-Satz 'Création Changement de mois' Collect = Neuer Sammlungssatz Obj = Me.Controls.Add ("forms .Label.1 ") Mit Obj .Name =" LbChoixMois ".Object.Caption =" Choix du mois: ".Left = 5 .Top = 5 .Width = 70 .Height = 10 End With 'BOUTONS Set Obj = Me. Controls.Add ("forms.CommandButton.1") With Obj .Name = "MoisPrec" .Object.Caption = "" .Left = 95 .Top = 1 .Width = 20 .Height = 20 End With Set Cl = New Classe1 Setze Cl.Bouton = Obj Collect.Add Cl'Création entête Jours de la semaine For i = 1 To 7 Setze Obj = Me.Controls.Add ("forms.Label.1") With Obj .Name = "Jour" & i .Object.Caption = UCase (Left (Format (DateSerial (2014, 9, i), "dddd"), 1)) .Left = 20 * (i - 1) + 5 .Top = 25 .Width = 20 .Height = 10 End With Next i 'création boutons "jours" Mois = Monat (Datum) MoisEnCours = Mois Annee = Jahr (Datum) AnneeEnCours = Annee CreationBoutonsJours Mois, Annee Wenn Links (Format (Datum, "dd"), 1) = "0", dann Me.Controls ("Bouton" und Format (Datum, "d")). SetFocus Else Me.Controls ("Bouton" und Format (Datum), "dd")). SetFocus End Sub 

Erstellen Sie die Schaltflächen

Die Anzahl der Tage variiert von Monat zu Monat, daher erstellen wir sie dynamisch. Dafür brauchen wir ein Verfahren:
  • Entfernen Sie die alten Knöpfe
  • Erstellen Sie neue Schaltflächen basierend auf dem Monat und dem Jahr.

Erstellen Sie ein Modul (Einfügen> Modul) und kopieren Sie den folgenden Code:

 Option Explicit Public WithEvents Bouton As MSForms.CommandButton Private Sub Bouton_Click () Fall auswählen Bouton.Name Fall "MoisPrec" MoisEnCours = MoisEnCours - 1 If MoisEnCours = 0 Then MoisEnCours = 12 AnneeEnCours = AnneeEnCours 1 Then = 1900 MsgBox "Première année: 1900" End If End If Case "MoisSuiv" MoisEnCours = MoisEnCours + 1 If MoisEnCours = 13 Dann MoisEnCours = 1 AnneeEnCours = AnneeEnCours + 1 End If End Wählen Sie ErstellungshinweiseJours MoisEnCours, End Sub 

Die Klassenmodule

Wir müssen ein Modul zum Klassifizieren erstellen, damit die Befehlsschaltflächen funktionieren.

So navigieren Sie zwischen Monaten:

 Option Explicit Public WithEvents Btn As MSForms.CommandButton 'Klicken Sie auf "Jour". Private Sub Btn_Click () Dim maDate As Date maDate = CDate (Btn.Caption & "/" & Calendrier.Tag)' La ligne suivante détermine Die Aktion wird ausgeführt, wenn Sie das Datum eingeben, an dem die Nachricht eingegangen ist. Die Meldung lautet: 'ActiveCell.Value = maDate' Unload Calendrier MsgBox maDate End Sub Zum Anfang Ihr Feedback an uns Private Sub Btn_MouseMove (ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Dim maDate As Date maDate = CDate (Btn.Caption & "/" & Calendrier.Tag) If EstJourFerie (maDate) oder Paques (Year (maDate)) = maDate Then Btn.ControlTipText = QuelFerie (maDate) End Sub 

Das Klassenmodul für die Tage

 Option Explicit Public WithEvents Btn As MSForms.CommandButton 'Klicken Sie auf "Jour". Private Sub Btn_Click () Dim maDate As Date maDate = CDate (Btn.Caption & "/" & Calendrier.Tag)' La ligne suivante détermine Die Aktion wird ausgeführt, wenn Sie das Datum eingeben, an dem die Nachricht eingegangen ist. Die Meldung lautet: 'ActiveCell.Value = maDate' Unload Calendrier MsgBox maDate End Sub Zum Anfang Ihr Feedback an uns Private Sub Btn_MouseMove (ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Dim maDate As Date maDate = CDate (Btn.Caption & "/" & Calendrier.Tag) If EstJourFerie (maDate) oder Paques (Year (maDate)) = maDate Then Btn.ControlTipText = QuelFerie (maDate) End Sub 

Feiertage verwalten

In dem zuvor erstellten Standardmodul werden drei Funktionen zum Identifizieren von Feiertagen hinzugefügt.

Eine Funktion, die den Feiertag als Zeichenfolge zurückgibt

 'Fonction qui retourne le jour férié en "String"' Dieses Dokument enthält Informationen zu den angegebenen Daten. Public Function QuelFerie (Jour As Date) Als String Dim maDate Als Datum Dim a As Integer, m As Integer, j As Integer maDate = Paques (Year (Jour)) Wenn Jour = maDate Dann QuelFerie = "Dimanche de Pâques": Exit Function Wenn Jour = CDate (maDate + 1) Dann QuelFerie = "Lundi de Pâques": Exit Function Wenn Jour = CDate (maDate + 50) Dann QuelFerie = "Lundi de Pentecôte": Exit-Funktion Wenn Jour = CDate (maDate + 39) Dann QuelFerie = "Jeudi de l'ascension": Exit-Funktion a = Year (Jour): m = Month (Jour): j = Tag (Jour) Fall auswählen m * 100 + j Fall 101 QuelFerie = "1er Janvier": Exit-Funktion Fall 501 QuelFerie = "1er Mai": Exit-Funktion Fall 508 QuelFerie = "8 Mai": Exit-Funktion Fall 714 QuelFerie = " 14 Juillet ": Exit Function Case 815 QuelFerie =" 15 Août ": Exit Function Case 1101 QuelFerie =" 1er Novembre ": Exit Function Case 1111 QuelFerie =" 11 Novembre ": Exit Function Case 1225 QuelFerie =" Noël ": Exit Function End Wählen Sie End Function 

Eine Funktion, die die Feiertage identifiziert

 'SOURCES:' //blog.developpez.com/philben/p11458/vba-access/sagit-il-dun-jour-ferie Öffentliche Funktion EstJourFerie (ByVal laDate As Date, optional ByVal EstPentecoteFerie As Boolean = True) As Boolean 'Détermine Das Datum des Vorbringens in Frankreich ist nicht: '101 = 1er Janvier - 501 = 1er Mai - 508 = 8 Mai - 714 = 14 Juillet' 815 = 15 Août - 1101 = 1er Novembre - 1111 = 11. November - 1225 = 25 Dezember 'dPa = Lundi de Pâques - dAs = Jeudi de l'Ascension - dPe = Lundi de Pentecôte' Bemerkung: Le lundi de Pentecôte ist eine Zeitreise ohne Wahlrecht (EstPentecoteFerie = False dans care) 'Philben - v1.0 - 2012 - Freie Verwendung von Static Annee als Ganzzahl, dPa als Datum, dAs als Datum, dPe als Datum, bPe als Boolean Dim a als Ganzzahl, m als Ganzzahl, j als Ganzzahl a = Jahr (laDate) : m = Monat (Datum): j = Tag (Datum) Fall auswählen m * 100 + j Fall 101, 501, 508, 714, 815, 1101, 1111, 1225 EstJourFerie = True Fall 323 bis 614 '323: Datum mini Lundi de Pâques - 614: Dat e maxi Lundi de Pentecôte Wenn Annee oder EstPentecoteFerie bPe Dann Annee = a: dPa = Paques (a) + 1: dAs = dPa + 38 bPe = EstPentecoteFerie: Wenn bPe Dann dPe = dPa + 49 Sonst dPe = # 1/1 / 100 # End If Select Case DateSerial (a, m, j): Fall dPa, dAs, dPe: EstJourFerie = True: End Select End Select End Function 
Vorherige Artikel Nächster Artikel

Top-Tipps