VBA Excel [Vse različice] - Koledarski nadzor

VBA Excel [Vse različice] - Koledarski nadzor

Uvod

Nadzor koledarja VBA se je spremenil med Excelom 2003 in Excelom 2010. Starejše različice imajo nadzor, imenovan kot " Koledar ", in za nove različice se imenuje " DT Picker ". Pri poskusu uporabe lahko pride do težav z združljivostjo:
  • delovnih zvezkov s kontrolnikom Koledar na novih različicah programa Excel
  • delovnih zvezkov z orodjem DT Picker v prejšnji različici programa Excel.

Druga skrb je v različici Microsoft Officea, ki se uporablja. Nekatere konfiguracije podjetij ne omogočajo dostopa do kontrolnika DT Picker. Da bi to odpravili, predlagam, da ustvarite lasten nadzor koledarja z uporabo uporabniškega obrazca.

Oblika uporabnika

Uporabniški obrazec bo vseboval:
  • 29 in 31 ukazne tipke za "dneve".
  • Oznaka "Izbira meseca".
  • 2 gumba ("") za pomikanje med meseci.
  • Trenutni mesec in leto bosta prikazana v naslovu uporabniškega dela.
  • Vse kontrole v tej uporabniški obliki bodo ustvarjene dinamično.

Kako začeti

Odprite urejevalnik VBA, ustvarite novo uporabniško obliko in spremenite njeno lastnost Ime na "Calendrier".

Kopirajte spodnjo kodo v modul uporabniške oblike:

 Možnost Explicit Private Sub UserForm_Initialize () Dim Obj As Control Dim i Kot Integer, Mois Kot Integer, Annee Kot Integer Dim Cl As Classe1 'Création Sprememba mošnosti' LABEL Set Collect = Nova zbirka Set Obj = Me.Controls.Add ("oblike") .Label.1 ") Z Obj .Name =" LbChoixMois ".Object.Caption =" Choix du mois: ".Left = 5 .Top = 5 .Width = 70 .Height = 10 End with 'BOUTONS Nastavi Obj = Me. Controls.Add ("forms.CommandButton.1") Z Obj .Name = "MoisPrec" .Object.Caption = "" .Left = 95.Top = 1 .Width = 20 .Height = 20 End With Set Cl = Nova klasa1 Nastavite Cl.Bouton = Obj Collect.Add Cl 'Création vnesite Jours de la semaine Za i = 1 do 7 Nastavite Obj = Me.Controls.Add ("forms.Label.1") Z Obj .Name = "Jour" & i .Object.Caption = UCase (levo (Format (DateSerial (2014, 9, i), "dddd"), 1)). Levo = 20 * (i - 1) + 5. Vrh = 25 .Širina = 20. = 10 Konec z naslednjimi i 'création boutons "jours" Mois = Mesec (Datum) MoisEnCours = Mois Annee = Leto (Datum) AnneeEnCours = Annee CreationBoutonsJours Mois, Annee Če je levo (Format (Datum, "dd"), 1) = "0", potem Me.Controls ("Bouton" & Format (Datum, "d")) SetFocus Else Me.Controls ("Bouton" & Oblika (datum) SetFocus End Sub 

Ustvarite gumbe

Število dni se razlikuje od meseca do meseca, zato jih bomo dinamično ustvarjali. Za to potrebujemo postopek, ki ga potrebujemo:
  • Odstranite stare gumbe
  • Ustvarite nove gumbe glede na mesec in leto.

Ustvarite modul (Vstavi> Modul) in kopirajte spodnjo kodo:

 Možnost Eksplicitna javna z dogodki Bouton kot MSForms.CommandButton Zasebna podpora Bouton_Click () Izberite primer Bouton.Name Primer "MoisPrec" MoisEnCours = MoisEnCours - 1 Če MoisEnCours = 0 Potem MoisEnCours = 12 AnneeEnCours = AnneeEnCours - 1 Če AnneeEnCours = 1899 Potem MoisEnCours = 1 AnneeEnCours = 1900 MsgBox "Premiere année: 1900" End If End Če je primer "MoisSuiv" MoisEnCours = MoisEnCours + 1 Če je MoisEnCours = 13 Torej MoisEnCours = 1 AnneeEnCours = AnneeEnCours + 1 End Če se konča Izberite CreationBoutonsJours MoisEnCours, AnneeEnCours End 

Razredni moduli

Za ukazne gumbe bomo morali izdelati modul razreda.

Za pomikanje med meseci:

 Možnost Eksplicitna javna z dogodki Btn As MSForms.CommandButton 'Orodja za izdajo dovoljenj za objavo v zasebni podmeni Btn_Click () Dim maDate As Datum maDate = CDate (Btn.Caption & "/" & Calendrier.Tag) "La ligne suivante détermine L'action à effectuer lors d'un clic sur le bouton 'Pour entrer la date choisie dans une cellule et fermer l'Userform:' ActiveCell.Value = maDate 'Izprazni Calendrier MsgBox maDate End Sub' Affiche le nom du jour férié au survol btn_MouseMove (ByVal Gumb Kot Integer, ByVal Shift Kot Integer, ByVal X Kot Enoten, ByVal Y Kot Enoten) Dim maDate As Datum maDate = CDate (Btn.Caption & "/" & Calendrier.Tag) Če EstJourFerie (maDate) ali Paques (leto (maDate)) = maDate Potem Btn.ControlTipText = QuelFerie (maDate) End Sub 

Modul razreda za dneve

 Možnost Eksplicitna javna z dogodki Btn As MSForms.CommandButton 'Orodja za izdajo dovoljenj za objavo v zasebni podmeni Btn_Click () Dim maDate As Datum maDate = CDate (Btn.Caption & "/" & Calendrier.Tag) "La ligne suivante détermine L'action à effectuer lors d'un clic sur le bouton 'Pour entrer la date choisie dans une cellule et fermer l'Userform:' ActiveCell.Value = maDate 'Izprazni Calendrier MsgBox maDate End Sub' Affiche le nom du jour férié au survol btn_MouseMove (ByVal Gumb Kot Integer, ByVal Shift Kot Integer, ByVal X Kot Enoten, ByVal Y Kot Enoten) Dim maDate As Datum maDate = CDate (Btn.Caption & "/" & Calendrier.Tag) Če EstJourFerie (maDate) ali Paques (leto (maDate)) = maDate Potem Btn.ControlTipText = QuelFerie (maDate) End Sub 

Vodenje državnih praznikov

V standardnem modulu, ki smo ga ustvarili prej, bomo dodali tri funkcije za identifikacijo praznikov.

Funkcija, ki vrne praznik kot niz

 "Fonction qui retourne le jour férié en" String "'utile pour les info-bulles v survol des jours fériés Javna funkcija QuelFerie (čas kot datum) kot niz dim maDate kot datum dim a kot celo število, m kot celo število, j kot celo število maDate = Paques (leto (čas)) Če je Jour = maDate Potem QuelFerie = "Dimanche de Pâques": Izhod Funkcija Če Jour = CDate (maDate + 1) Potem QuelFerie = "Lundi de Pâques": Izhod Funkcija Če Jour = CDate (maDate + 50) Nato QuelFerie = "Lundi de Pentecôte": Izhod iz funkcije Če je Jour = CDate (maDate + 39), potem QuelFerie = "Jeudi de l'ascension": Izhodna funkcija a = leto (čas): m = mesec (čas): j = Day (Jour) Izberi Case m * 100 + j Primer 101 QuelFerie = "1er Janvier": Izhod iz funkcije Case 501 QuelFerie = "1er Mai": Izhod iz funkcije 508 QuelFerie = "8 Mai": Izhod iz funkcije 714 QuelFerie = " 14 Juillet ": Izhod iz funkcijskega primera 815 QuelFerie =" 15 Août ": Izhod iz funkcijskega primera 1101 QuelFerie =" 1er Novembre ": Izhod iz funkcije 1111 QuelFerie =" 11 november ": Izhod iz funkcije 1225 QuelFerie =" Noël ": Izhod iz funkcije End End Select End 

Funkcija, ki določa državne praznike

 'SOURCES:' //blog.developpez.com/philben/p11458/vba-access/sagit-il-dun-jour-ferie Javna funkcija EstJourFerie (ByVal laDate As Date, Neobvezno ByVal EstPentecoteFerie Kot Boolean = True) Kot logični 'Détermine si la date passée en argument est un jour férié (v Franciji) ali ne: '101 = 1er Janvier - 501 = 1er Mai - 508 = 8 Maj - 714 = 14 Juillet' 815 = 15 Août - 1101 = 1er Novembre - 1111 = 11. november - 1225 = 25 décembre 'dPa = Lundi de Pâques - dAs = Jeudi de l'Ascension - dPe = Lundi de Pentecôte' Opomba: Le lundi de Pentecôte je izven férié mais parfois non chômé (EstPentecoteFerie = False dans ce cas) 'Philben - v1.0 - 2012 - Prosto za uporabo statičnih annee kot celo število, dPa kot datum, dAs kot datum, dPe kot datum, bPe kot logično dim a Kot celo število, m kot celo število, j kot celo število a = leto (laDate) : m = Mesec (laDate): j = Dan (laDate) Izberi Case m * 100 + j Case 101, 501, 508, 714, 815, 1101, 1111, 1225 EstJourFerie = True Case 323 To 614 '323: Datum mini Lundi de Pâques - 614: Dat e maxi Lundi de Pentecôte Če je Kdo Ali EstPentecoteFerie bPe Potem Annee = a: dPa = Paques (a) + 1: dAs = dPa + 38 bPe = EstPentecoteFerie: Če bPe Nato dPe = dPa + 49 Drug dPe = # 1/1 / 100 # End Če izberete Case DateSerial (a, m, j): Case dPa, dAs, dPe: EstJourFerie = True: End Select End End Select End 
Prejšnji Članek Naslednji Članek

Top Nasveti