VBA Excel [Kõik versioonid] - Kalendri juhtimine

VBA Excel [Kõik versioonid] - Kalendri juhtimine

Sissejuhatus

VBA kalendrikontroll on Excel 2003 ja Excel 2010 vahel muutunud. Vanematel versioonidel on kontroll nimega " Kalender " ja uute versioonide puhul nimetatakse seda " DT Picker " kontrolliks. Ühilduvuse probleemid võivad tekkida, kui proovite kasutada:
  • Exceli uute versioonide kalendrikontrolliga töövihikud
  • eelmise Exceli versiooni DT Pickeriga töövihikud.

Teine probleem puudutab Microsoft Office'i versiooni. Mõned ettevõtte konfiguratsioonid ei võimalda juurdepääsu DT valija juhtimisele. Selle parandamiseks soovitan teil luua oma kalendrikontrolli, kasutades kasutajaformaati.

UserForm

UserForm sisaldab:
  • 29 ja 31 käsunupud "Päevadeks".
  • Märgis "Kuu valik".
  • 2 nuppu ("") kuu vahel liikumiseks.
  • Jooksev kuu ja aasta kuvatakse UserForm'i pealkirja all (pealkiri).
  • Kõik selle kasutajafoori kontrollid luuakse dünaamiliselt.

Alustamine

Avage oma VBA-redaktor, looge uus UserForm ja muutke oma nimi-omaduseks „Calendrier”.

Kopeerige allpool olev kood kasutajafondi moodulisse:

 Võimalus Selgesõnaline Privaatne Sub UserForm_Initialize () Dim Obj nagu kontroll Dim i kui terviklik, mois kui terviklik, Annee kui terviklik Dim Cl nagu Classe1 'Création Changement de mois' LABEL Set Collect = Uus kollektsioonikomplekt Obj = Me.Controls.Add ("vormid .Label.1 ") Obj .Name =" LbChoixMois ".Object.Caption =" Choix du mois: ".Left = 5 .Top = 5. Laius = 70.Kõrgus = 10 Lõpeta 'PÕHJAD Seada Obj = Me. Controls.Add ("vormid.CommandButton.1") Obj .Name = "MoisPrec" .Object.Caption = "" .Left = 95. Ülemine = 1. Laius = 20 .Kõrgus = 20 Lõpeta komplektiga Cl = New Classe1 Set Cl.Bouton = Obj Collect.Add Cl 'Création entête Jours de la semaine i = 1 kuni 7 seadistamiseks Obj = Me.Controls.Lisa ("vormid.Label.1") Obj .Name = "Jour" ja i .Object.Caption = UCase (vasakul (formaat (DateSerial (2014, 9, i), "dddd"), 1)) .Left = 20 * (i - 1) + 5 .Top = 25. Laius = 20. = 10 Lõpeta järgmisena i 'création boutons "jours" Mois = kuu (kuupäev) MoisEnCours = Mois Annee = aasta (kuupäev) AnneeEnCours = Annee loomineBoutonsJours Mois, Annee Kui vasakul (formaat (kuupäev, "dd"), 1) = "0", siis Me.Controls ("Bouton" ja vorming (kuupäev, "d")). SetFocus Else Me.Controls ("Bouton" ja vorming (kuupäev), "dd")). SetFocus End Sub 

Loo nupud

Päevade arv varieerub ühe kuu võrra, nii et me loome neid dünaamiliselt. Selleks on vaja menetlust:
  • Eemaldage vanad nupud
  • Loo uued nupud kuu ja aasta põhjal.

Looge moodul (Insert> Module) ja kopeerige allolev kood:

 Võimalus Selgesõnaline avalikkus Bouton nagu MSForms.CommandButton Private Sub Bouton_Click () Vali Case Bouton.Name Case "MoisPrec" MoisEnCours = MoisEnCours - 1 Kui MoisEnCours = 0 Seejärel MoisEnCours = 12 AnneeEnCours = AnneeEnCours - 1 Kui AnneeEnCours = 1899 Siis MoisEnCours = 1899 = 1900 MsgBox "Première année: 1900" Lõpeta lõpp, kui juhtum "MoisSuiv" MoisEnCours = MoisEnCours + 1 Kui MoisEnCours = 13 Seejärel MoisEnCours = 1 AnneeEnCours = AnneeEnCours + 1 Lõpp Kui Lõpeta Vali loomineBoutonsJours MoisEnCours, AnneeEnCours End 

Klassimoodulid

Töötamiseks peame käsuklahvide klassi mooduli jaoks looma.

Kuu vahel liikumiseks:

 Võimalus selgesõnaliselt avalikele üritustele Btn nagu MSForms.CommandButton 'Procédure lors du clic sur un bouton' jour "Private Sub Btn_Click () Dim maDate kui kuupäev maDate = CDate (Btn.Caption &" / & Calendrier.Tag) 'La ligne suivante détermine l'action à effuer lors d'en clout suru bouton 'Pour entrer la date choisie dans une cellule et fermer l'Userform:' ActiveCell.Value = maDate 'Kalendri tühjendamine MsgBox maDate End Sub' Affiche le nom du jour férié au survol du bouton par la souris Private Sub Btn_MouseMove (ByVal-nupp nagu tervikuna, ByVal Shift kui integraal, ByVal X üksikuna, ByVal Y üksikuna) Dim maDate kui kuupäev maDate = CDate (Btn.Caption & "/" & Calendrier.Tag) EstJourFerie (maDate) või Paques (aasta (maDate)) = maDate Seejärel Btn.ControlTipText = QuelFerie (maDate) Lõpeta alam 

Klassimoodul neile päevadele

 Võimalus selgesõnaliselt avalikele üritustele Btn nagu MSForms.CommandButton 'Procédure lors du clic sur un bouton' jour "Private Sub Btn_Click () Dim maDate kui kuupäev maDate = CDate (Btn.Caption &" / & Calendrier.Tag) 'La ligne suivante détermine l'action à effuer lors d'en clout suru bouton 'Pour entrer la date choisie dans une cellule et fermer l'Userform:' ActiveCell.Value = maDate 'Kalendri tühjendamine MsgBox maDate End Sub' Affiche le nom du jour férié au survol du bouton par la souris Private Sub Btn_MouseMove (ByVal-nupp nagu tervikuna, ByVal Shift kui integraal, ByVal X üksikuna, ByVal Y üksikuna) Dim maDate kui kuupäev maDate = CDate (Btn.Caption & "/" & Calendrier.Tag) EstJourFerie (maDate) või Paques (aasta (maDate)) = maDate Seejärel Btn.ControlTipText = QuelFerie (maDate) Lõpeta alam 

Riigipühade haldamine

Varem loodud standardmoodulis lisame puhkuse tuvastamiseks kolm funktsiooni.

Funktsioon, mis tagastab puhkuse stringina

 "Fonction qui retourne le jour férié en" String "utile pour les info-bulles au survol des jours fériés Avalik funktsioon QuelFerie (Jour As Date) Stringina Dim maDate kui kuupäev Dim a As Integer, m Nagu Integer, j Nagu Integer maDate = Paques (aasta (Jour)) Kui Jour = maDate Siis QuelFerie = "Dimanche de Pâques": Välju funktsioon Kui Jour = CDate (maDate + 1) Siis QuelFerie = "Lundi de Pâques": Välju funktsioon Kui Jour = CDate (maDate + 50) Siis QuelFerie = "Lundi de Pentecôte": Välju funktsioonist Kui Jour = CDate (maDate + 39) Siis QuelFerie = "Jeudi de l'ascension": Välju funktsioon a = Aasta (Jour): m = Kuu (Jour): j = Päev (Jour) Vali juhtum m * 100 + j Juhtum 101 QuelFerie = "1er Janvier": Välju Funktsioon Juhtum 501 QuelFerie = "1er Mai": Välju Funktsioon 508 QuelFerie = "8 Mai": Välju Funktsioon 714 QuelFerie = " 14 Juillet ": Exit Function Case 815 QuelFerie =" 15 Août ": Välju funktsioonist 1101 QuelFerie =" 1er Novembre ": Välju funktsioonist 1111 QuelFerie =" 11 Novembre ": Välju funktsioonist 1225 QuelFerie =" Noël ": Välju funktsiooni lõpust Vali lõppfunktsioon 

Funktsioon, mis tähistab riigipühi

 „SOURCES:” //blog.developpez.com/philben/p11458/vba-access/sagit-il-dun-jour-ferie Avalik funktsioon EstJourFerie (ByVal laDate kui kuupäev, valikuline ByVal EstPentecoteFerie kui boolean = tõene) Boolean 'Détermine si la date passée en argument est un jour férié (et Prantsusmaa) ou non: '101 = 1er Janvier - 501 = 1er Mai - 508 = 8 Mai - 714 = 14 Juillet' 815 = 15 Août - 1101 = 1er Novembre - 1111 = 11 Novembre - 1225 = 25 Décembre 'dPa = Lundi de Pâques - dAs = Jeudi de l'Ascension - dPe = Lundi de Pentecôte' Remarque: Le lundi de Pentecôte est ja férié mais parfois non chômé (EstPentecoteFerie = False dans ce cas) "Philben - v1.0 - 2012 - Static Annee kasutamine tasuta, dPa kui kuupäev, dAs kui kuupäev, dPe kui kuupäev, bPe kui loogiline Dim a kui tervikuna, m kui tervikuna, j kui tervikuna a = aasta (laDate) : m = kuu (laDate): j = päev (laDate) Vali juhtum m * 100 + j Case 101, 501, 508, 714, 815, 1101, 1111, 1225 EstJourFerie = Tõeline juhtum 323 kuni 614 '323: Kuupäev mini Lundi de Pâques - 614: Dat e maxi Lundi de Pentecôte Kui Annee või EstPentecoteFerie bPe Siis Annee = a: dPa = Paques (a) + 1: dAs = dPa + 38 bPe = EstPentecoteFerie: Kui bPe Seejärel dPe = dPa + 49 Else dPe = # 1/1 / 100 # Lõpeta, kui valite kohtuasja DateSerial (a, m, j): juhtum dPa, dAs, dPe: EstJourFerie = tõene: lõpp-valiku lõpp-lõpp-funktsioon 
Eelmine Artikkel Järgmine Artikkel

Top Näpunäited