VBA Excel [Minden verzió] - Naptárvezérlés

VBA Excel [Minden verzió] - Naptárvezérlés

Bevezetés

A VBA naptárvezérlése az Excel 2003 és az Excel 2010 között megváltozott. A régebbi verzióknak a " Naptár " nevű vezérlője van, az új verzióknak pedig a " DT Picker " vezérlőt. Kompatibilitási problémák merülhetnek fel, amikor megpróbálod használni:
  • munkafüzetek az Excel új verzióiban a Naptár vezérléssel
  • munkafüzetek az Excel korábbi verziójának DT Picker-jével.

A másik probléma a Microsoft Office verziójának használata. Egyes vállalati konfigurációk nem teszik lehetővé a DT Picker vezérléshez való hozzáférést. Ennek kiküszöbölésére javaslom, hogy hozzon létre saját naptárvezérlőt a Userform segítségével.

A UserForm

A UserForm tartalmazza:
  • 29 és 31 parancsgombok a "Napok" számára.
  • Címke "A hónap választása".
  • 2 gomb ("") a hónapok közötti navigáláshoz.
  • Az aktuális hónap és év megjelenik a UserForm "Felirat" (címe) címében.
  • A UserFormban található összes vezérlés dinamikusan jön létre.

Elkezdeni

Nyissa meg a VBA-szerkesztőt, hozzon létre egy új UserForm-ot, és változtassa meg a Name tulajdonságot "Calendrier" -re.

Másolja az alábbi kódot a UserForm modulba:

 Opció kifejezetten privát Sub UserForm_Initialize () Dim Obj mint vezérlés Dim i mint integer, Mois mint integer, Annee mint integer Dim Cl as Classe1 'Création Changement de mois' LABEL Set Collect = Új gyűjteménykészlet Obj = Me.Controls.Add ("űrlapok .Label.1 ") Obj .Name =" LbChoixMois ".Object.Caption =" Choix du mois: ".Left = 5 .Top = 5. Szélesség = 70. Magasság = 10 Vége 'BOUTONS Beállítás Obj = Me. Controls.Add ("formas.CommandButton.1") Obj .Name = "MoisPrec" .Object.Caption = "" .Left = 95 .Top = 1. Szélesség = 20. Cl.Bouton = Obj Collect.Ad Cl 'Création entête Jours de la semaine hozzáadása i = 1-től 7-ig Obj = Me.Controls.Add ("form.Label.1") hozzáadása Obj .Name = "Jour" és i .Object.Caption = UCase (Balra (Formátum (DateSerial (2014, 9, i), "dddd"), 1)) .Left = 20 * (i - 1) + 5 .Top = 25. Szélesség = 20. = 10 vége a következővel i 'création boutons "jours" Mois = hónap (dátum) MoisEnCours = Mois Annee = év (dátum) AnneeEnCours = Annee CreationBoutonsJours Mois, Annee Ha balra (Formátum (dátum, dd), 1) = "0", akkor Me.Control ("Bouton" és formátum (dátum, "d")). SetFocus Else Me.Controls ("Bouton" és formátum (dátum), "dd")). SetFocus End Sub 

Hozza létre a gombokat

A napok száma egy hónapról a másikra változik, így dinamikusan hozzuk létre őket. Ehhez szükségünk van egy eljárásra:
  • Távolítsa el a régi gombokat
  • Hozzon létre új gombokat a hónap és az év alapján.

Hozzon létre egy modult (Insert> Module), és másolja az alábbi kódot:

 Opció Kifejezetten a nyilvánosságra Bouton-ként, mint MSForms.CommandButton Privát Sub Bouton_Click () Válassza ki az esetet Bouton.Name Case "MoisPrec" MoisEnCours = MoisEnCours - 1 Ha MoisEnCours = 0 Ezután MoisEnCours = 12 AnneeEnCours = AnneeEnCours - 1 Ha AnneeEnCours = 1899 Majd MoisEnCours = 1 AnneeEnCours = 1900 MsgBox "Première année: 1900" Vége Ha vége Ha az eset "MoisSuiv" MoisEnCours = MoisEnCours + 1 Ha MoisEnCours = 13 Majd MoisEnCours = 1 AnneeEnCours = AnneeEnCours + 1 Vége Ha Vége Válassza ki a létrehozástBoutonsJours MoisEnCours, AnneeEnCours vége 

Az osztály modulok

Létre kell hoznunk az osztálymodulhoz a parancsgombok működéséhez.

A hónapok közötti navigáció:

 Opció Kifejezett nyilvánosság A Btn mint MSForms.CommandButton 'Procédure lors du clic sur un bouton' jour "Privát Sub Btn_Click () Dim maDate mint dátuma maDate = CDate (Btn.Caption &" / & Calendrier.Tag) 'La ligne suivante détermine l'action à effuer lors d'en clic suru bouton '' '' '' Felhasználó általi időzítés választása és felhasználása '' Felhasználóforma: 'ActiveCell.Value = maDate' Calendrier betöltése MsgBox maDate End Sub 'Affiche le nom du jour férié au survol du bouton par la souris Privát Sub Btn_MouseMove (ByVal gomb, mint integer, ByVal Shift mint integer, ByVal X Single, ByVal Y mint Single) Dim maDate Dátumként maDate = CDate (Btn.Caption & "/" & Calendrier.Tag) Ha EstJourFerie (maDate) vagy Paques (év (maDate)) = maDate Ezután Btn.ControlTipText = QuelFerie (maDate) Vége Sub 

Az osztály-modul a napokra

 Opció Kifejezett nyilvánosság A Btn mint MSForms.CommandButton 'Procédure lors du clic sur un bouton' jour "Privát Sub Btn_Click () Dim maDate mint dátuma maDate = CDate (Btn.Caption &" / & Calendrier.Tag) 'La ligne suivante détermine l'action à effuer lors d'en clic suru bouton '' '' '' Felhasználó általi időzítés választása és felhasználása '' Felhasználóforma: 'ActiveCell.Value = maDate' Calendrier betöltése MsgBox maDate End Sub 'Affiche le nom du jour férié au survol du bouton par la souris Privát Sub Btn_MouseMove (ByVal gomb, mint integer, ByVal Shift mint integer, ByVal X Single, ByVal Y mint Single) Dim maDate Dátumként maDate = CDate (Btn.Caption & "/" & Calendrier.Tag) Ha EstJourFerie (maDate) vagy Paques (év (maDate)) = maDate Ezután Btn.ControlTipText = QuelFerie (maDate) Vége Sub 

Ünnepnapok kezelése

A korábban létrehozott szabványos modulban három funkciót adunk hozzá az ünnepek azonosításához.

Olyan függvény, amely a nyaralást karakterláncként adja vissza

 "Fonction qui retourne le jour férié en" String "utile pour les info-bulles au survol des jours fériés Nyilvános funkció QuelFerie (Jour As Date) Stringként Dim maDate mint dátum Dim a As Integer, m Mint Integer, j Mint Integer maDate = Paques (év (Jour)) Ha Jour = maDate Ezután QuelFerie = "Dimanche de Pâques": Kilépés funkció Ha Jour = CDate (maDate + 1) Ezután QuelFerie = "Lundi de Pâques": Kilépés funkció Ha Jour = CDate (maDate + 50) Ezután QuelFerie = "Lundi de Pentecôte": Kilépés funkció Ha Jour = CDate (maDate + 39) Ezután QuelFerie = "Jeudi de l'ascension": Kilépés funkció a = Év (Jour): m = Hónap (Jour): j = Day (Jour) Válassza ki az esetet m * 100 + j 101 eset QuelFerie = "1er Janvier": Kilépés funkció 501 QuelFerie = "1er Mai": Kilépés funkció 508 QuelFerie = "8 Mai": Kilépés funkció 714 QuelFerie = " 14 Juillet ": Kilépés funkció 815 QuelFerie =" 15 Août ": Kilépés funkció 1101 QuelFerie =" 1er Novembre ": Kilépés funkció 1111 QuelFerie =" 11 Novembre ": Kilépés funkció 1225 QuelFerie =" Noël ": Kilépés a funkció végének kiválasztása funkcióból 

A munkaszüneti napokat azonosító funkció

 "SOURCES:" //blog.developpez.com/philben/p11458/vba-access/sagit-il-dun-jour-ferie Nyilvános funkció EstJourFerie (ByVal laDate mint dátum, opcionális ByVal EstPentecoteFerie mint logikai = igaz) Boolean 'Détermine s la date passée en argument est un jour férié (en France) 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 és a feelé mais parfois non chômé (EstPentecoteFerie = False dans ce cas) "Philben - v1.0 - 2012 - Statikus Annee használata szabadon, dPa - dátumként, dAs - dátumként, dPe - dátumként, bPe - Boolean - Dim a As Integer, m. Integer, j. : m = hónap (laDate): j = nap (laDate) Válassza az m * 100 + j esetet. 101, 501, 508, 714, 815, 1101, 1111, 1225 EstJourFerie = Igaz eset 323 - 614 '323: dátum mini Lundi de Pâques - 614: Dat e maxi Lundi de Pentecôte Ha egy Annee vagy EstPentecoteFerie bPe Ezután Annee = a: dPa = Paques (a) + 1: dAs = dPa + 38 bPe = EstPentecoteFerie: Ha bPe Ezután dPe = dPa + 49 Else dPe = # 1/1 / 100 # Vége Ha kiválasztja az esetet DateSerial (a, m, j): dPa, dAs, dPe: EstJourFerie = Igaz: Vége kiválasztása Vége vége funkció 
Előző Cikk Következő Cikk

Top Tippek