TOP

VBA-पाठ 12.2. नियंत्रण (Controls)

YouLibreCalc for Excel logo

नियंत्रण (Controls) में सभी प्रकार के गुण और उनसे जुड़ी कई घटनाएं हैं, लेकिन अभी हम केवल कुछ को देखेंगे जिनका उपयोग VBA पर प्रोग्रामिंग में किया जाता है।


आइए 3 नियंत्रण जोड़कर प्रारंभ करें - Label, TextBox और CommandButton:

निम्नलिखित परिणाम प्राप्त करने के लिए इस नियंत्रण के नाम और गुणों को संपादित करें (Caption संपत्ति का उपयोग करके जिसमें पाठ शामिल है):

अब, जब हम नंबर दर्ज करते हैं और ओके पर क्लिक करते हैं, तो कुछ नहीं होता है।

एक क्रिया बनाने के लिए, हम एक ईवेंट जोड़ेंगे जो टेक्स्ट बॉक्स से दर्ज किए गए मान को सेल A1 में लिखेगा और फॉर्म को बंद कर देगा।

आप नियंत्रण पर डबल-क्लिक करके नीचे दिखाए गए विकल्पों तक पहुंच सकते हैं:

इस ड्रॉप-डाउन सूची में विभिन्न नियंत्रण और यह फ़ॉर्म शामिल हैं।

बटन (बटन) और Click इवेंट का चयन करें:

Private Sub CommandButton_validate_Click()

     Range("A1") = Textbox_number.Value
     'Textbox_number टेक्स्ट बॉक्स का नाम है
     'Value एक प्रॉपर्टी है जिसमें टेक्स्ट बॉक्स का मान होता है
    
     Unload Me
     'अनलोड करने से फॉर्म बंद हो जाता है (UserForm)
     'हम प्रपत्र नाम के स्थान पर Me का उपयोग करते हैं (क्योंकि यह कोड UserForm के मध्य में है जिसे हम बंद करना चाहते हैं)
End Sub

दर्ज किया गया मान अब इस फॉर्म (UserForm) को बंद करने से पहले ही सेल A1 में सहेजा जाएगा।

दूसरा कैप्शन जोड़ें (Label) और निम्नलिखित गुणों को संपादित करें: Caption, Forecolor (रंग : लाल) और Visible (डिफ़ॉल्ट नियंत्रण को छिपाने के लिए गलत):

अब एक इवेंट जोड़ते हैं जो उपयोगकर्ता द्वारा टेक्स्ट फ़ील्ड में मान बदलने पर सक्रिय हो जाएगा। यदि मान संख्यात्मक नहीं है तो ईवेंट एक त्रुटि संदेश प्रदर्शित करेगा।

Private Sub Textbox_number_Change()
     If IsNumeric(Textbox_number.Value) Then 'IF एक संख्यात्मक मान है...
         Label_error.Visible = False 'शीर्षक (Label) छिपा हुआ है
     Else 'अन्यथा...
         Label_error.Visible = True 'नाम प्रदर्शित है
     End If
End Sub

हर बार अगला वर्ण दर्ज करने पर दर्ज किए गए मान का परीक्षण किया जाएगा।

हमें अभी भी फॉर्म पर दर्ज मूल्यों का सत्यापन (सत्यापन) जोड़ने की आवश्यकता है। यदि मान कोई संख्या नहीं है तो हम एक संदेश दिखाएंगे:

Private Sub CommandButton_validate_Click()
     If IsNumeric(Textbox_number.Value) Then 'IF एक संख्यात्मक मान है...
         Range("A1") = Textbox_number.Value 'A1 पर कॉपी करें
         Unload Me 'मैं बंद कर रहा हूँ
     Else 'अन्यथा...
         MsgBox "Incorrect value" 'अमान्य मूल्य
     End If
End Sub

कोई त्रुटि संदेश न होने पर फॉर्म का दाहिना भाग खाली न छोड़ने के लिए, हम इस फॉर्म की Width प्रॉपर्टी को समायोजित करके इसका आकार कम कर सकते हैं:

Private Sub Textbox_number_Change()
     If IsNumeric(Textbox_number.Value) Then 'IF एक संख्यात्मक मान है...
         Label_error.Visible = False 'शीर्षक (Label) छिपा हुआ है
         Me.Width = 156 'फॉर्म की चौड़ाई
     Else 'अन्यथा...
         Label_error.Visible = True 'नाम प्रदर्शित है
         Me.Width = 244 'फॉर्म की चौड़ाई
     End If
End Sub

आप Excel उदाहरण फ़ाइल डाउनलोड कर सकते हैं: userform1.xls

यहाँ परिणाम है:

Checkboxes

CheckBox का उपयोग कैसे करें इसका एक उदाहरण यहां दिया गया है:

जब चेकबॉक्स चेक/अनचेक किया जाता है, तो संबंधित सेल का मान Click इवेंट का उपयोग करके बदला जा सकता है:

Private Sub CheckBox1_Click() 'नंबर 1
     If CheckBox1.Value = True Then 'यदि चयनित...
        Range("A2") = "Checked"
     Else 'यदि चयनित नहीं है...
        Range("A2") = "Unchecked"
     End If
End Sub

Private Sub CheckBox2_Click() 'नंबर 2
     If CheckBox2.Value = True Then 'यदि चयनित...
        Range("B2") = "Checked"
     Else 'यदि चयनित नहीं है...
        Range("B2") = "Unchecked"
     End If
End Sub

Private Sub CheckBox3_Click() 'संख्या 3
     If CheckBox3.Value = True Then 'यदि चयनित...
        Range("C2") = "Checked"
     Else 'यदि चयनित नहीं है...
        Range("C2") = "Unchecked"
     End If
End Sub

इस उदाहरण में, जब फॉर्म पहली बार खोला जाता है तो चेकबॉक्स शुरू में अनचेक हो जाते हैं।

जब संबंधित सेल का मान "चेक किया गया" ("Checked") हो, तो प्रत्येक चेकबॉक्स को चेक करने के लिए, हम UserForm_Initialize का उपयोग करके फॉर्म सक्रियण पर चेक चलाएंगे:

Private Sub UserForm_Initialize() 'अगर जाँच की गयी
     If Range("A2") = "Checked" Then
         CheckBox1.Value = True
     End If
     
     If Range("B2") = "Checked" Then
         CheckBox2.Value = True
     End If
     
     If Range("C2") = "Checked" Then
         CheckBox3.Value = True
     End If
End Sub

यहां आप तैयार Excel फ़ाइल में एक उदाहरण देख सकते हैं: userform2.xls

विकल्प बटन (Option Buttons)

विकल्प बटन (Option Buttons या, कभी-कभी, इसे Radio Buttons भी कहा जाता है) का उपयोग करते समय, उपयोगकर्ता चेकबॉक्स के विपरीत, प्रति "समूह" केवल एक विकल्प का चयन कर सकता है, जहां उपयोगकर्ता एक साथ कई बॉक्स पर टिक कर सकता है।

"समूह" बनाने के लिए पहले Frame डालें और फिर OptionButton डालें:

यहां आप तैयार Excel फ़ाइल में एक उदाहरण देख सकते हैं: userform3.xls

फॉर्म सबमिट करते समय, डेटा को चयनित कॉलम नाम (column_value) और पंक्ति (row_value) से जुड़े सेल में दर्ज किया जाएगा।

यह जानने के लिए कि कौन से विकल्प चुने गए हैं, हम पिछले उदाहरण (चेकबॉक्स के साथ) जैसा ही कर सकते हैं, लेकिन हम कोड आकार को कम करने के लिए एक लूप का उपयोग करेंगे।

हम For प्रत्येक लूप का उपयोग करेंगे, जो एक प्रकार का लूप है जिसे हमने पहले कवर नहीं किया है। यह लूप आपको "ऑब्जेक्ट समूह" में प्रत्येक ऑब्जेक्ट के लिए निर्देश निष्पादित करने की अनुमति देता है:

Private Sub CommandButton1_Click()
     Dim column_value As String, row_value As String
     
     'प्रत्येक फ़्रेम_कॉलम नियंत्रण के लिए लूप
     For Each column_button In Frame_column.Controls
         'यदि नियंत्रण मान = सत्य है (तब यदि चयनित है) ...
         If column_button.Value Then
            'वेरिएबल "column_value" बटन टेक्स्ट मान लेता है
            column_value = column_button.Caption
         End If
     Next
     
     'दूसरे ब्लॉक के लिए साइकिल
     For Each row_button In Frame_row.Controls
         If row_button.Value Then
             row_value = row_button.Caption
         End If
     Next

     Range(column_value & row_value) = "Cell chosen!"  '"सेल चयनित!"
     
     'फॉर्म बंद करें (अनलोड करें) (मैं)
     Unload Me
End Sub

हमारा फॉर्म अब "सेल चयनित!" मान इनपुट करता है। चयनित सेल में.

किसी त्रुटि से बचने के लिए, हमें यह जांचना होगा कि उपयोगकर्ता ने विकल्पों के दो सेटों में से सही विकल्प चुना है या नहीं।

इस उदाहरण में, जब फॉर्म अभी तक पूरा नहीं हुआ है, तो कन्फर्म बटन ("Confirm") को धूसर (अक्षम) कर दिया जाएगा। यह सबसे आसान समाधान नहीं है, लेकिन यह इस बात का एक अच्छा उदाहरण है कि फ़ंक्शंस/प्रक्रियाएँ किसी फ़ॉर्म (UserForm) के बीच में उपयोगी क्यों हैं।

बटन को अक्षम करने के लिए टेक्स्ट और सक्षम प्रॉपर्टी को संपादित करें।

परिणाम इस प्रकार होगा:

पिछले कोड में, हमने विकल्प बटन (Option Buttons) के मान प्राप्त करने के लिए दो For प्रत्येक लूप का उपयोग किया था। अब हमें दस विकल्पों के लिए कन्फर्म बटन ("Confirm") और Click इवेंट के लिए समान मानों का उपयोग करने की आवश्यकता है।

ऐसा करने के लिए, हमें प्रत्येक ईवेंट के लिए लूप्स को कॉपी करने की आवश्यकता नहीं है, हम उन्हें एक फ़ंक्शन के माध्यम से कॉल करेंगे।

पिछले कोड से शुरू करके और इसे संशोधित करके, हम यह परिणाम प्राप्त करेंगे:

 Private Function column_value()
 'फ़ंक्शन जो चयनित बटन के लिए टेक्स्ट मान लौटाता है (column_value)
     For Each column_button In Frame_column.Controls
         If column_button.Value Then
             column_value = column_button.Caption
         End If
     Next
 End Function

 Private Function row_value()
 'एक फ़ंक्शन जो चयनित बटन के लिए टेक्स्ट मान लौटाता है (row_value)
     For Each row_button In Frame_row.Controls
         If row_button.Value Then
             row_value = row_button.Caption
         End If
     Next
 End Function

 Private Sub CommandButton1_Click() 'जब आप क्लिक करते हैं तो होने वाली क्रिया ("अपने चयन की पुष्टि करें")
     Range(column_value & row_value) = "Cell chosen!"  '"सेल चयनित!"
     'column_value और row_value इन फ़ंक्शन द्वारा लौटाए गए मान हैं
     Unload Me
 End Sub

हमें बस एक ऐसी प्रक्रिया बनानी है जो जांचती है कि क्या विकल्प बटन सही ढंग से चुने गए हैं (दो कार्यों को कॉल करके), और जो आवश्यक होने पर उस बटन को सक्रिय करता है।

फिर, प्रत्येक रेडियो बटन के प्रत्येक ईवेंट के लिए कोड को 10 बार कॉपी करने से बचने के लिए सत्यापन एक अलग प्रक्रिया में किया जाता है:

Private Sub activate_button()
 'यदि स्थिति का सफलतापूर्वक परीक्षण किया जाता है तो बटन को सक्रिय करना
     If column_value <> "" And row_value <> "" Then
     'column_value और row_value इन फ़ंक्शन द्वारा लौटाए गए मान हैं
         CommandButton1.Enabled = True
         CommandButton1.Caption = "Confirm your selection"  '"अपनी पसंद की पुष्टि करें"
     End If
End Sub

Private Sub OptionButton11_Click()
     activate_button 'हम "सक्रिय_बटन" प्रक्रिया शुरू करते हैं
End Sub
Private Sub OptionButton12_Click()
     activate_button
End Sub
Private Sub OptionButton13_Click()
     activate_button
End Sub
Private Sub OptionButton14_Click()
     activate_button
End Sub
Private Sub OptionButton15_Click()
     activate_button
End Sub
Private Sub OptionButton16_Click()
     activate_button
End Sub
Private Sub OptionButton17_Click()
     activate_button
End Sub
Private Sub OptionButton18_Click()
     activate_button
End Sub
Private Sub OptionButton19_Click()
     activate_button
End Sub
Private Sub OptionButton20_Click()
     activate_button
End Sub

यहां आप तैयार Excel फ़ाइल में एक उदाहरण देख सकते हैं: userform3b.xls