VBA Excel [Visas versijas] - kalendāra kontrole

VBA Excel [Visas versijas] - kalendāra kontrole

Ievads

VBA kalendāra kontrole ir mainījusies starp programmu Excel 2003 un Excel 2010. Vecākajās versijās ir kontrole ar nosaukumu " Kalendārs ", un jaunajām versijām to sauc par " DT atlasītāja " kontroli. Mēģinot izmantot, var rasties saderības problēmas:
  • darbgrāmatas ar kalendāra kontroli jaunajās Excel versijās
  • darbgrāmatas ar DT Picker uz iepriekšējās Excel versijas.

Vēl viena problēma ir Microsoft Office versijā. Dažas korporatīvās konfigurācijas neļauj piekļūt DT atlasītāja kontrolei. Lai to novērstu, es iesaku izveidot savu kalendāra kontroli, izmantojot Userform.

LietotājsForm

UserForm saturēs:
  • 29 un 31 komandu pogas "Dienas".
  • Uzlīme "Mēneša izvēle".
  • 2 pogas (""), lai pārvietotos starp mēnešiem.
  • Pašreizējais mēnesis un gads tiks parādīti UserForm "Caption" (virsraksts).
  • Visas šīs UserForm vadīklas tiks izveidotas dinamiski.

Darba sākšana

Atveriet savu VBA redaktoru, izveidojiet jaunu UserForm un nomainiet nosaukumu Name uz "Calendrier".

Nokopējiet tālāk norādīto kodu lietotāja moduļa modulī:

 Iespēja Skaidrs Privāts Sub UserForm_Initialize () Dim Obj Kā Kontrole Dim i Kā Integer, Mois Kā Integer, Annee Kā Integer Dim Cl Kā Classe1 'Création Changement de mois' LABEL Set Collect = Jauna kolekcija Set Obj = Me.Controls.Add ("veidlapas .Label.1 ") Ar Obj .Name =" LbChoixMois ".Object.Caption =" Choix du mois: ".Left = 5 .Top = 5. Platums = 70. Augstums = 10 Beigas ar 'BOUTONS Set Obj = Me. Controls.Add ("formas.CommandButton.1") Ar Obj .Name = "MoisPrec" .Object.Caption = "" .Left = 95 .Top = 1. Platums = 20. Augstums = 20 beigas ar komplektu Cl = New Classe1 Iestatīt Cl.Bouton = Obj Collect.Add Cl 'Création entête Jours de la semaine Par i = 1 līdz 7 Iestatiet Obj = Me.Controls.Add ("form.Label.1") Ar Obj .Name = "Jour" & i .Object.Caption = UCase (pa kreisi (formāts (DateSerial (2014, 9, i), "dddd"), 1)) .Left = 20 * (i - 1) + 5 .Top = 25. Platums = 20. = 10 beigas ar nākamo i 'création boutons "jours" Mois = mēnesis (datums) MoisEnCours = Mois Annee = gads (datums) AnneeEnCours = Annee radīšanaBoutonsJours Mois, Annee Ja pa kreisi (formāts (datums, "dd"), 1) = "0", tad Me.Controls ("Bouton" un formāts (datums, "d")). SetFocus Else Me.Controls ("Bouton" un formāts (datums), "dd")). SetFocus End Sub 

Izveidojiet pogas

Dienu skaits atšķiras no viena mēneša uz citu, tāpēc mēs tos radīsim dinamiski. Šim nolūkam mums ir nepieciešama procedūra:
  • Noņemiet vecās pogas
  • Izveidojiet jaunas pogas, pamatojoties uz mēnesi un gadu.

Izveidojiet moduli (Ievietot> Modulis) un kopējiet tālāk norādīto kodu:

 Iespēja Skaidrs Publisks ar Bouton Kā MSForms.CommandButton Privāts Sub Bouton_Click () Atlasiet Lietu Bouton.Name Lieta "MoisPrec" MoisEnCours = MoisEnCours - 1 Ja MoisEnCours = 0 Tad MoisEnCours = 12 AnneeEnCours = AnneeEnCours - 1 Ja AnneeEnCours = 1899 Tad MoisEnCours = 1 AnneeEnCours = 1900 MsgBox "Première année: 1900" Beigas Ja Beigas Ja Lieta "MoisSuiv" MoisEnCours = MoisEnCours + 1 Ja MoisEnCours = 13 Tad MoisEnCours = 1 AnneeEnCours = AnneeEnCours + 1 Beigas Ja Izveidot RadīšanuBoutonsJours MoisEnCours, AnneeEnCours Beigas 

Klases moduļi

Lai strādātu, komandu pogām būs jāizveido klases modulis.

Lai pārvietotos pa mēnešiem:

 Iespēja Izskaidrot publiskus notikumus Btn Kā MSForms.CommandButton 'Procédure lors du clic sur un bouton' jour "Privāts sub Btn_Click () Dim maDate kā datums maDate = CDate (Btn.Caption &" / "& Calendrier.Tag) 'La ligne suivante détermine l'action à effuer lors d'en clout sur bouton 'Pour entrer la date choisie dans une cellule et fermer l'Userform:' ActiveCell.Value = maDate 'Ielādējiet kalendāru MsgBox maDate Beigas sub' Affiche le nom du jour férié au survol du bouton par la souris Privātā sub Btn_MouseMove (ByVal poga kā pilnīga, ByVal Shift kā vienota, ByVal X kā Single, ByVal Y kā Single) Dim maDate kā datums maDate = CDate (Btn.Caption & "/" & Calendrier.Tag) Ja EstJourFerie (maDate) vai Paques (gads (maDate)) = maDate Tad Btn.ControlTipText = QuelFerie (maDate) Beigas beigas 

Klases modulis dienām

 Iespēja Izskaidrot publiskus notikumus Btn Kā MSForms.CommandButton 'Procédure lors du clic sur un bouton' jour "Privāts sub Btn_Click () Dim maDate kā datums maDate = CDate (Btn.Caption &" / "& Calendrier.Tag) 'La ligne suivante détermine l'action à effuer lors d'en clout sur bouton 'Pour entrer la date choisie dans une cellule et fermer l'Userform:' ActiveCell.Value = maDate 'Ielādējiet kalendāru MsgBox maDate Beigas sub' Affiche le nom du jour férié au survol du bouton par la souris Privātā sub Btn_MouseMove (ByVal poga kā pilnīga, ByVal Shift kā vienota, ByVal X kā Single, ByVal Y kā Single) Dim maDate kā datums maDate = CDate (Btn.Caption & "/" & Calendrier.Tag) Ja EstJourFerie (maDate) vai Paques (gads (maDate)) = maDate Tad Btn.ControlTipText = QuelFerie (maDate) Beigas beigas 

Valsts svētku dienas

Iepriekš izveidotajā standarta modulī mēs pievienosim trīs funkcijas, lai identificētu brīvdienas.

Funkcija, kas atgriež brīvdienu kā virkni

 “Fonction qui retourne le jour férié en” “String” “utile pour les info-bulles au survol des jours fériés Publiskā funkcija QuelFerie (Jour As Date) kā virkne Dim maDate kā datums Dim a kā Integer, m Kā Integer, j Kā Integer maDate = Paques (Gads (Jour)) Ja Jour = maDate Tad QuelFerie = "Dimanche de Pâques": Iziet funkcija Ja Jour = CDate (maDate + 1) Tad QuelFerie = "Lundi de Pâques": Iziet funkcija Ja Jour = CDate (maDate + 50) Tad QuelFerie = "Lundi de Pentecôte": Iziet no funkcijas Ja Jour = CDate (maDate + 39) Tad QuelFerie = "Jeudi de l'ascension": Iziet no funkcijas a = Gads (Jour): m = Mēnesis (Jour): j = Diena (Jour) Izvēlieties lietu m * 100 + j Lieta 101 QuelFerie = "1er Janvier": Iziet Funkcija Lieta 501 QuelFerie = "1er Mai": Iziet Funkcija Lieta 508 QuelFerie = "8 Mai": Iziet funkcija 714 QuelFerie = " 14 Juillet ": Exit Function Case 815 QuelFerie =" 15 Août ": Iziešanas funkcija Lieta 1101 QuelFerie =" 1er Novembre ": Iziešanas funkcija Lieta 1111 QuelFerie =" 11 Novembre ": Iziet funkcija 1225 QuelFerie =" Noël ": iziet no funkcijas beigu funkcijas beigu funkcijas 

Funkcija, kas identificē valsts svētku dienas

 “AVOTAS:” //blog.developpez.com/philben/p11458/vba-access/sagit-il-dun-jour-ferie Publiskā funkcija EstJourFerie (ByVal laDate kā datums, fakultatīvs ByVal EstPentecoteFerie kā Būla = True) Kā Būla “Détermīns” en la passée en argument est un žurn férié (en Francija) 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: LepatecoteFerie = False dans ce cas) "Philben - v1.0 - 2012 - brīvi izmantot statisko Annee kā pilnīgu, dPa kā datumu, dAs kā datumu, dPe kā datumu, bPe kā būla dimensija a kā pilnīgs, m Kā Integer, j As Integer a = gads (laDate) : m = mēnesis (laDate): j = diena (laDate) Izvēlieties lietu m * 100 + j Lieta 101, 501, 508, 714, 815, 1101, 1111, 1225 EstJourFerie = patiesais gadījums 323 līdz 614 '323: datums mini Lundi de Pâques - 614: Dat e maxi Lundi de Pentecôte Ja Annee vai EstPentecoteFerie bPe Tad Annee = a: dPa = Paques (a) + 1: dAs = dPa + 38 bPe = EstPentecoteFerie: Ja bPe Tad dPe = dPa + 49 Citas dPe = # 1/1 / 100 # Beigas Ja atlasiet lietu Datumserial (a, m, j): Lieta dPa, dAs, dPe: EstJourFerie = True: beigu izvēles beigu beigu funkcija 
Iepriekšējais Raksts Nākamais Raksts

Top Padomi