मैंने इस पर शोध करने और यह जानने के लिए बहुत समय बिताया कि यह कैसे काम करता है, वास्तव में इस घटना को ट्रिगर करने के बाद। चूंकि बहुत बिखरी हुई जानकारी थी, इसलिए मैंने यह तय करने का फैसला किया कि मैंने सभी को एक ही स्थान पर काम करने के लिए क्या मिला, इस प्रकार चरण दर चरण इस प्रकार है:
1) वीबीए प्रोजेक्ट (YourWorkBookName.xlsm) के तहत ओपन वीबीए एडिटर, माइक्रोसॉफ्ट एक्सेल ऑब्जेक्ट खोलें और उस शीट का चयन करें जिससे परिवर्तन ईवेंट संबंधित होगा।
2) डिफ़ॉल्ट कोड दृश्य "सामान्य" है। शीर्ष मध्य में ड्रॉप-डाउन सूची से, "वर्कशीट" चुनें।
3) निजी सब वर्कशीट_सेलेक्शन चेंज पहले से ही है जैसा कि होना चाहिए, इसे अकेला छोड़ दें। ऊपर से माइक रोसेनब्लम का कोड कॉपी / पेस्ट करें। उस सेल के लिए .Range संदर्भ बदलें, जिसके लिए आप एक परिवर्तन (B3, मेरे मामले में) देख रहे हैं। अपने मैक्रो को अभी तक जगह न दें, हालांकि (मैंने "मैक्रो" शब्द को "तब" के बाद हटा दिया):
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("H5")) Is Nothing Then
End Sub
या बाईं ओर स्थित ड्रॉप-डाउन सूची से, "बदलें" चुनें और निजी सब एंड एंड सब के बीच की जगह में पेस्ट करें If Not Intersect(Target, Me.Range("H5")) Is Nothing Then
4) "तब" के बाद लाइन पर घटनाओं को बंद कर दें ताकि जब आप अपने मैक्रो को कॉल करें, तो यह घटनाओं को ट्रिगर न करे और इस वर्कशीट_चेंज को फिर से कभी न खत्म होने वाले चक्र में चलाने की कोशिश करें जो एक्सेल को क्रैश करता है और / या अन्यथा सब कुछ गड़बड़ कर देता है:
Application.EnableEvents = False
5) अपने मैक्रो को कॉल करें
Call YourMacroName
6) अगले बदलाव पर घटनाओं को फिर से चालू करें (और किसी भी / सभी अन्य घटनाओं) ट्रिगर:
Application.EnableEvents = True
7) यदि ब्लॉक और उप को समाप्त करें:
End If
End Sub
संपूर्ण कोड:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("B3")) Is Nothing Then
Application.EnableEvents = False
Call UpdateAndViewOnly
Application.EnableEvents = True
End If
End Sub
यह मॉड्यूल से बाहर / चालू घटनाओं को लेता है जो समस्याएं पैदा करता है और बस परिवर्तन को ट्रिगर करता है, घटनाओं को बंद करता है, आपके मैक्रो को चलाता है और घटनाओं को वापस चालू करता है।