2012-04-04 9 views
8

से अधिक है तो मैं एक पॉप-अप (vbOKOnly) प्रदर्शित करने के लिए एक सरल मैक्रो लिखने की कोशिश कर रहा हूं यदि सेल में मान किसी निश्चित मान से अधिक हो।संदेश बॉक्स पॉपअप दिखाने के लिए वीबीए कोड यदि लक्ष्य कक्ष में सूत्र एक निश्चित मान

मूल रूप से उत्पादों और छूट के साथ वर्कशीट है। मेरे पास एक सेल में एक सूत्र है, ए 1 कहता है, जो छूट को सभी प्रविष्टियों की प्रतिशत (50% या .5) प्रभावी छूट के रूप में दिखाता है।

मैं जो खोज रहा हूं वह कोड बॉक्स प्रदर्शित करने के लिए कोड है यदि सेल ए 1 का मान 50% से अधिक है, क्योंकि किसी अन्य सेल के इनपुट ने छूट 50% से अधिक कर दी है।

धन्यवाद!

+3

क्या आप सशर्त स्वरूपण से अवगत हैं? क्या कोई कारण है कि आप सशर्त स्वरूपण के लिए एक संदेश बॉक्स पसंद करेंगे? –

उत्तर

14

आप अपने चादर के लिए निम्न VBA कोड जोड़ सकते हैं:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Range("A1") > 0.5 Then 
     MsgBox "Discount too high" 
    End If 
End Sub 

हर बार एक सेल शीट पर बदल जाता है, यह सेल A1 का मान की जाँच करेगा।

नोट्स:

  • यदि ए 1 भी अन्य स्प्रेडशीट में स्थित डेटा पर निर्भर करता है, मैक्रो अगर आपको लगता है कि डेटा को बदलने नहीं बुलाया कर दिया जाएगा।
  • मैक्रो को बुलाया जाएगा हर बार आपकी शीट पर कुछ बदलाव कहा जाएगा। यदि इसमें बहुत सारे सूत्र हैं (जैसे 1000s में) यह धीमा हो सकता है।

Widor एक अलग दृष्टिकोण (Worksheet_Change की Worksheet_Calculate बजाय) का उपयोग करता है:

  • लाभ: यदि ए 1 के मूल्य अन्य पत्रक में स्थित कोशिकाओं से जुड़ा हुआ है उसकी विधि काम करेंगे।
  • विपक्ष: यदि आपके शीट पर कई लिंक हैं जो अन्य चादरों का संदर्भ देते हैं, तो उनकी विधि थोड़ी धीमी गति से चलती है।

निष्कर्ष: Worksheet_Change का उपयोग करता है, तो A1 केवल एक ही पत्रक पर स्थित डेटा पर निर्भर करता है, Worksheet_Calculate का उपयोग करता है, तो नहीं।

+0

हाँ आप सही हैं। मैंने अपनी पोस्ट हटा दी ऐसा लगता है कि मैंने प्रश्न को गलत तरीके से पढ़ा है :) इसे सही करने के लिए +1 :) –

+0

@ सिद्धार्थ रूट ईमानदार होने के लिए मैंने पहली बार डेटा सत्यापन के साथ जवाब दिया, जब तक कि मैं प्रश्न की तीसरी पंक्ति नहीं पढ़ता;) – assylias

+0

एलओएल @ एसिलायस। हमें याद दिलाता है कि हम अभी भी इंसान हैं;) –

1

मुझे नहीं लगता कि एक संदेश बॉक्स इसके साथ जाने का सबसे अच्छा तरीका है क्योंकि आपको सेल सामग्री की जांच करने के लिए एक लूप में चल रहे वीबी कोड की आवश्यकता होगी, या जब तक आप मैन्युअल रूप से मैक्रो चलाने की योजना नहीं बनाते। इस मामले में मुझे लगता है कि यदि पृष्ठभूमि ऊपरी सीमा से अधिक हो तो पृष्ठभूमि को लाल रंग में बदलने के लिए सेल में सशर्त स्वरूपण जोड़ना बेहतर होगा (उदाहरण के लिए)।

+2

लूप की कोई आवश्यकता नहीं है। – assylias

+1

@assylias मैं आपके द्वारा प्रदान की गई विधि का उपयोग करते हुए कहा गया सेल पर ध्यान केंद्रित करने के लिए एक स्थानीय स्क्रिप्ट की लाइनों के साथ सोच रहा था, तो सच नहीं लूप की आवश्यकता है, लेकिन जैसा कि आप स्प्रेडशीट पर अधिक डेटा लेते हैं, उतना ही समय लगेगा चलाते हैं। –

+0

@assylias विषय खोजते समय यह मिला। दरअसल मैट सही है। जबकि वीबीए में सिंटैक्स में लूप का उपयोग नहीं किया जाता है, वैसे ही वर्कशीट_Change एक निरंतर "लूपिंग" कॉल होता है। दूसरे शब्दों में, यह एक आंतरिक कॉल है "अभी तक कुछ भी हुआ है?" ओवर और ओवर, हर मिलीसेकंड। – ejbytes

2

अनिवार्य रूप से आप प्रासंगिक वर्कशीट के Calculate ईवेंट में कोड जोड़ना चाहते हैं।

वीबीए संपादक की प्रोजेक्ट विंडो में, उस शीट को डबल-क्लिक करें जिसे आप संपादक विंडो के शीर्ष पर ड्रॉप-डाउन से कोड जोड़ना चाहते हैं, बाईं ओर 'वर्कशीट' और 'गणना करें' चुनें। क्रमशः सही।

वैकल्पिक रूप से, पत्रक के संपादक में नीचे दिए गए कोड को कॉपी आप उपयोग करना चाहते: देखने के लिए

Private Sub Worksheet_Calculate() 

If Sheets("MySheet").Range("A1").Value > 0.5 Then 
    MsgBox "Over 50%!", vbOKOnly 
End If 

End Sub 

इस तरह, हर बार कार्यपत्रक पुनर्गणना यह जांच करेगा कि मूल्य> 0.5 या 50% है ।

संबंधित मुद्दे