कई छवियों को ऑन-क्लिक मैक्रो से कनेक्ट करने का चतुर तरीका - VAB Excel


0

मैंने पहले भी यह सवाल पूछा है, लेकिन एक भयानक तरीके से स्वीकार किया है, इसलिए मैं यह फिर से पूछ रहा हूं। इसलिए यहां मैं एक बार फिर हूं।

मैं वीबीए एक्सेल में एक कार्यक्रम बना रहा हूं - या बेहतर, कुछ कार्यों को कोड के कुछ हिस्सों के साथ एक वर्कशीट के साथ जोड़कर कुछ बनाने के लिए जो एक स्टैंड-अलोन प्रोग्राम की तरह काम करता है। इसके एक हिस्से में एक निश्चित मैक्रो पर कई छवियों (उनमें से दसियों) का बंधन शामिल है, क्लिक पर।

मैंने "डेवलपर" -> "डिज़ाइन मोड" बटन के माध्यम से उक्त छवियां बनाई हैं। छवियों को फैशन में नाम दिया गया है: Image1, Image2, Image3 ... आदि जो मैं चाहता हूं, यदि, उदाहरण के लिए, मैं Image1 दबाता हूं, तो सबरूटीन एक्शन (1) कहा जाता है। यदि मैं Image100 दबाता हूं, तो मैं चाहता हूं कि सबरूटीन एक्शन (100) को बुलाया जाए। इसलिए, मैं एक्शन सबरूटीन को उस मूल्य के अनुसार कॉल करना चाहता हूं जिसके अनुसार छवि को क्लिक किया गया है, उदाहरण में मैंने आपको इसके नाम के अनुसार दिया है।

त्वरित खोज के साथ, इस काम को करने का पहला तरीका मुझे पता चला:

Sub Image1_Click()
     Call Action(1)
End Sub

यह Image1 पर एक क्लिक के लिए था। Image100 पर एक क्लिक के लिए, यह होगा:

Sub Image100_Click()
     Call Action(100)
End Sub  

पूरी तरह से इस तरह का उपयोग करने का नकारात्मक पक्ष स्पष्ट है: मुझे उन छवियों के रूप में कई ऑन-क्लिक हैंडलर बनाने की आवश्यकता होगी, भले ही हर बार एक ही दिनचर्या कहा जाता है और पास होने के लिए मूल्य प्राप्त करने के लिए सभी मायने रखती है वह छवि है नाम।

इसलिए, अपने तर्क का स्पष्ट क्रम और जो मैं प्राप्त करना चाहता हूं, उसे देखते हुए, मैं चाहूंगा कि आप मेरे सभी चित्रों के लिए ऑन-क्लिक ईवेंट बनाने के लिए एक अधिक चतुर तरीका प्रदान करें, बिना अतिरेक कोड और एक का उपयोग किए बिना। स्पष्ट रूप से इष्टतम तर्क नहीं।

नोट: भ्रम की स्थिति में, कार्रवाई सबरूटीन सभी छवियों के लिए समान है। केवल मान बदल गया है।


प्रासंगिक प्रश्न जिसका उल्लेख पहले किया गया था
रायस्टाफ़ेरियन

@Raystafarian यह वही है जो मैं उम्मीद कर रहा था। हालांकि मुझे नहीं पता कि यह संभव होगा या नहीं, मैं VBA से परिचित नहीं हूं। इसलिए मैंने यह सवाल किया। साकार नहीं होना भी एक संभावित उत्तर है। नोट: एक्शन सबरूटीन सभी छवियों के लिए समान है।
Noob Doob

@Raystafarian जो आप कह रहे हैं वह जवाब देने जैसा है कि जो मैं पूछ रहा हूं वह कब्जेदार नहीं है। सभी 100 इमेज (x) _Click सबरूटीन्स लिखना मेरा लक्ष्य है। और आपने गलत समझा। एक्शन (1) एक्शन (2) जैसी चीजें नहीं करता है। मैंने अभी बताया कि एक्शन एक ही सबरूटीन है, और प्रत्येक इमेज के लिए अलग नहीं है, लेकिन वैल्यू पास में बदलाव होता है।
Noob Doob

@Raystafarian Action (x) एक सबरूटीन है। चीजों को सरल करते हुए, आप कह सकते हैं कि यह दिखाता है कि किस छवि पर क्लिक की गई संख्या है।
Noob Doob

@Raystafarian यदि Application.Caller मुझे एक सफल स्ट्रिंग देता है, तो यह ठीक होना चाहिए। जब मैं इसका परीक्षण करूंगा, तो मैं इसके साथ प्रश्न पूछना चाहता हूं।
Noob Doob

जवाबों:


0

आप Application.Caller संपत्ति का उपयोग कर सकते हैं और सभी चित्रों को जेनेरिक मैक्रो असाइन कर सकते हैं और फिर तर्क के रूप में चित्र की आईडी पास कर सकते हैं -

Sub genericpicture_click()

Dim pic As String
pic = Application.Caller
MsgBox (pic)

End Sub

यहां मामलों का उपयोग करके एक उदाहरण दिया गया है :

  ' Procedure to display which button was pressed.
      Sub WhichButton()

         ' Assign the calling object to a variable.
         ButtonName = Application.Caller

         ' Display the name of the button that was clicked.
         Select Case ButtonName

            ' NOTE: When you type the name of the button, note that
            ' Visual Basic is case and space sensitive when comparing                                                
            ' strings. For example, "Button 6" and "button6" are not the 
            ' same.
            Case "Button 6"
            MsgBox Application.Caller & "  was Clicked"

            Case "Button 7"
            MsgBox Application.Caller & " was clicked."

            Case "Button 8"
            MsgBox Application.Caller & " was clicked."

         End Select

      End Sub
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.