VBA एक्सेल [सभी संस्करण] - कैलेंडर नियंत्रण

VBA एक्सेल [सभी संस्करण] - कैलेंडर नियंत्रण

परिचय

VBA का कैलेंडर नियंत्रण Excel 2003 और Excel 2010 के बीच बदल गया है। पुराने संस्करणों का नियंत्रण " कैलेंडर " के रूप में है और नए संस्करणों के लिए इसे " DT Picker " नियंत्रण कहा जाता है। जब आप उपयोग करने का प्रयास करते हैं तो संगतता समस्याएँ उत्पन्न हो सकती हैं:
  • एक्सेल के नए संस्करणों पर कैलेंडर नियंत्रण वाली कार्यपुस्तिकाएं
  • एक्सेल के पिछले संस्करण पर डीटी पिकर के साथ वर्कबुक।

एक और चिंता का विषय है माइक्रोसॉफ्ट ऑफिस का उपयोग किया जा रहा है। कुछ कॉर्पोरेट कॉन्फ़िगरेशन डीटी पिकर नियंत्रण तक पहुंच की अनुमति नहीं देते हैं। इसे मापने के लिए, मेरा सुझाव है कि आप अपना स्वयं का कैलेंडर नियंत्रण बनाएं, जिसका उपयोग उपयोगकर्ता-सुधार कर सकता है।

उपयोगकर्ता

UserForm में शामिल होगा:
  • "दिन" के लिए 29 और 31 कमांड बटन।
  • एक लेबल "महीने का विकल्प"।
  • 2 बटन ("") महीनों के बीच नेविगेट करने के लिए।
  • वर्तमान महीना और वर्ष UserForm के "कैप्शन" (शीर्षक) में प्रदर्शित किया जाएगा।
  • इस UserForm के भीतर सभी नियंत्रण गतिशील रूप से बनाए जाएंगे।

शुरू करना

अपना VBA संपादक खोलें, एक नया UserForm बनाएं और अपनी नाम संपत्ति को "Calendrier" में बदलें।

नीचे दिए गए कोड को UserForm के मॉड्यूल में कॉपी करें:

 विकल्प स्पष्ट निजी उप UserForm_Initialize () Dim Obj As Control Dim I As Integer, Mois As Integer, Annee As Integer Dim Cl As Classe1 'Création Change de mois' LABEL Set = नया संग्रह सेट Obj = Me.Controls.Add ("फ़ॉर्म" .Label.1 ") ओब्ज .Name =" LbChoixMois "के साथ ।Object.Caption =" Choix du mois: ".Left = 5 .Top = 5 .Width = 70 .Height = 10 अंत 'BOUTONS सेट ओब्ज = मी के साथ। Controls.Add ("form.CommandButton.1") ओब्ज के साथ ।Name = "Moisrerec" ।Object.Caption = "" .Left = 95 .Top = 1 .id = 20 = .Hight = 20 अंत सेट क्ल = New Classe1 के साथ। सेट करें Cl.Bouton = Obj लीजिए। Cl Clééé entéte Jours de la semaine for i = 1 to 7 Set Obj = Me.Controls.Add ("form.Label.1") Obj .Name = "URL" & i के साथ सेट करें। .Object.Caption = UCase (लेफ्ट (प्रारूप (DateSerial (2014, 9, i), "dddd"), 1)) .Left = 20 * (i - 1) + 5 .Top/ 25 .Width = 20। ऊंचाई = 10 एंड के साथ अगला I 'création boutons "पत्रिका" Mois = महीना (तिथि) MoisEnCours = Mois Annee = वर्ष (दिनांक) AnneeEnCours = एनी क्रिएशनBoutonsJours Mois, Annee अगर वाम (प्रारूप (दिनांक, "dd"), 1) = "0" तो मेरे लिए। कॉन्ट्रोल ("बॉटन" और प्रारूप (दिनांक, "डी"))। सेटफोकस एल्स मी.कंट्रोल ("बॉटन" और प्रारूप)।, "dd"))। सेटफोकस एंड सब 

बटन बनाएँ

दिनों की संख्या एक महीने से दूसरे महीने तक भिन्न होती है, इसलिए हम उन्हें गतिशील रूप से बनाएंगे। इसके लिए, एक प्रक्रिया जिसकी हमें आवश्यकता है:
  • पुराने बटन निकालें
  • महीने और साल के आधार पर नए बटन बनाएं।

एक मॉड्यूल बनाएं (डालें> मॉड्यूल) और नीचे दिए गए कोड को कॉपी करें:

 विकल्प स्पष्ट सार्वजनिक रूप से बॉउटॉन को MSForms.CommandButton Private Sub Bouton_Click () केस Bouton.Name केस "MoisPrec" MoeeEnCours = MoEEnCours - 1 का चयन करें। = 1900 MsgBox "प्रेमिएर एनी: 1900" एंड इफ अगर एंड केस "मोइससिव" MoisEnCours = MoisEnCours + 1 यदि MoisEnCours = 13 तो MoisEnCours = 1 एनीएनकेर्स = AnneeEnCours + 1 अंत यदि आप का चयन करेंगेबस्टरसंग MoisEnCours +। 

द क्लास मॉड्यूल

हमें काम करने के लिए कमांड बटन के लिए क्लास मॉड्यूल बनाना होगा।

महीनों के बीच नेविगेट करने के लिए:

 विकल्प स्पष्ट सार्वजनिक सार्वजनिक उपक्रमों को MSForms.CommandButton 'Procédure lors du Clic sur un bouton "पत्रिकाओं के रूप में" निजी सब Btn_Click () डिम maDate as DateDate = CDate (Btn.Caption & "/" & Calendrier.Tag)' लिग्नाइन 'सुग्गन सुग्गन l'act à effectuer lors d'un Clic sur le leon 'Pour entrer la date choisie dans une cellule et fermer l'Userform:' ActiveCell.Value = maDate = 'Unload Calendrier MsgBox maDate End Sub' Affiche le nom du पत्रिकाओं férié au बच du बॉटन पैर ला सोरिस प्राइवेट सब Btn_MouseMove (ByVal बटन As Integer, ByVal Shift As Integer, ByVal Y As Single) Dim maDate as Date maDate = CDate (Btn.Caption & "/" & Calendrier.Tag) If EstJourFerie (maDate) या पेस (वर्ष (maDate)) = maDate फिर Btn.ControlTipText = QuelFerie (maDate) अंतिम उप 

दिनों के लिए क्लास मॉड्यूल

 विकल्प स्पष्ट सार्वजनिक सार्वजनिक उपक्रमों को MSForms.CommandButton 'Procédure lors du Clic sur un bouton "पत्रिकाओं के रूप में" निजी सब Btn_Click () डिम maDate as DateDate = CDate (Btn.Caption & "/" & Calendrier.Tag)' लिग्नाइन 'सुग्गन सुग्गन l'act à effectuer lors d'un Clic sur le leon 'Pour entrer la date choisie dans une cellule et fermer l'Userform:' ActiveCell.Value = maDate = 'Unload Calendrier MsgBox maDate End Sub' Affiche le nom du पत्रिकाओं férié au बच du बॉटन पैर ला सोरिस प्राइवेट सब Btn_MouseMove (ByVal बटन As Integer, ByVal Shift As Integer, ByVal Y As Single) Dim maDate as Date maDate = CDate (Btn.Caption & "/" & Calendrier.Tag) If EstJourFerie (maDate) या पेस (वर्ष (maDate)) = maDate फिर Btn.ControlTipText = QuelFerie (maDate) अंतिम उप 

सार्वजनिक अवकाश का प्रबंध करना

पहले बनाए गए मानक मॉड्यूल में, हम छुट्टियों की पहचान करने के लिए तीन फ़ंक्शन जोड़ेंगे।

एक फ़ंक्शन जो एक स्ट्रिंग के रूप में छुट्टी लौटाता है

 'फॉन्यूशन क्यू रीटूर्ने ले मैगज़ीन' 'स्ट्रिंग' '' यूटाइल डालो लेस इंफो-बल्स एयू सर्वाइल डेस पत्रिकाएं फेरीज़ पब्लिक फंक्शन क्वेलफारी (जर्स एज़ डेट) स्ट्रींग डिम मेट के रूप में तारीख मंद एज़ एंगर, एम एज़ इंटर्गर, जे एज़ एंगर मैडेट। = पेक्स (वर्ष (जोन्स)) यदि जोन्स = एमएडेट तो क्वेलफारी = "डिमंच डे पेक्स": एग्जिट फंक्शन अगर जर्स = सीडेट (माडेट + 1) तो क्वैल्फरी = "लुंडी डी एएएक्स": एग्जिट फंक्शन अगर जेंट्स = सीडीएट (माडेट +) 50) उसके बाद क्वेलफ्री = "लुंडी डी पेंटेकोटे": एग्जिट फंक्शन अगर जर्स = सीडेट (maDate + 39) तो क्वेलफारी = "जेउडी डे ल’सकेन्सेशन": एग्जिट फंक्शन ए = वर्ष (पन्ने): एम = महीना (पत्रिका): जे = दिन (पन्ने) सेलेक्ट केस m * 100 + j केस 101 क्वेलफारी = "1 जनरवियर": एग्जिट फंक्शन केस 501 क्वेलफ्री = "1er माई": एग्जिट फंक्शन केस 508 क्वेलफ्री = "1 माई माई: एग्जिट फंक्शन केस 714 क्वेलफारी =" 14 Juillet ": एग्जिट फंक्शन केस 815 QuelFerie =" 15 Ao "t ": एग्जिट फंक्शन केस 1101 QuelFerie =" 1er Novembre ": एग्जिट फंक्शन केस 1111 QuelFerie =" 11 Novembre ": एग्जिट फंक्शन केस 1225 QuelFerie =" नोएल ": एग्जिट फंक्शन एंड सेलेक्ट एंड फंक्शन 

एक फ़ंक्शन जो सार्वजनिक छुट्टियों की पहचान करता है

 'स्रोत:' //blog.developpez.com/philben/p11458/vba-access/sagit-il-dun-jour-ferie पब्लिक फंक्शन EstJourFerie (ByVal laateate as Date, Optional ByVal EstPentecoteFerie as Boolean = True) बुलियन डीन के रूप में। si la date passée en तर्क एस्ट अन मैरिज férié (en France) ou non: '101 = 1er Janvier - 501 = 1er Mai - 508 = 8 Mai - 714 = 14 Juillet' 815 = 15 Aûût - 1101 = 1er Novembre - 1111 = 11 नोवेम्ब्रे - 1225 = 25 डेसम्ब्रे 'डीपीए = लुंडी डे पेक्स - डेस = जेउडी डी एल'कैसेन्सेशन - डीपीई = लुंडी डी पेंटेकोटे' रेमर्के: ले लुंडी डी पेंटेकोटे एस्ट मैगज़ीन फ़ेरी माई पैरोइफ़ नॉन चॉम्से (एस्टेपेस्ट) 'फिलबेन - v1.0 - 2012 - फ्रीजर के रूप में स्टेटिक एनी का उपयोग करने के लिए नि: शुल्क, दिनांक के रूप में डीएपीए, तिथि के रूप में डीएपी, तारीख के रूप में डीपीई, बूलियन डिम ए के रूप में पूर्णांक, एम के रूप में पूर्णांक, जे इंटेगर ए = वर्ष (लॉडेट) : m = महीना (laDate): j = Day (laDate) सेलेक्ट केस m * 100 + j केस 101, 501, 508, 714, 815, 1101, 1111, 1225 EstJourFerie = ट्रू केस 323 से 614 '323: डेट मिनी लुंडी डे पचेस - 614: डाॅट e मैक्सी लुंडी डी पेंटेकोटे यदि एक एनी या एस्टिपेंकोटेफ़री बीपीई है तो एनी = ए: डीपीए = पेस (ए) + १: dAs = dPa + ३P बीपीई = पीपेकोटेफ़री: अगर बीपीई तो डीपीई = डीपीए + ४ ९ एल्स डीपीई = १ / १ 100 # अंत यदि केस डेट सेलेरियल (a, m, j) का चयन करें: केस dPa, dAs, dPe: EstJourFerie = True: एंड सिलेक्ट एंड सिलेक्ट एंड फंक्शन का चयन करें 
पिछला लेख अगला लेख

शीर्ष युक्तियाँ