मेरे पास निम्नलिखित सबरूटीन है जो काम करता है जैसे मैं चाहता हूं कि जब मेरे पास केवल यह विशेष एक्सेल फाइल खुला हो

Private Sub Worksheet_Calculate()
    If Sheets("Dashboard").Range("Z11").Value > 0 Then
        Sheets("Dashboard").Shapes("tileOverdueTasks").Fill.ForeColor.RGB = RGB(185, 0, 0)
    Else
        Sheets("Dashboard").Shapes("tileOverdueTasks").Fill.ForeColor.RGB = RGB(0, 185, 0)
    End If
End Sub

समस्या यह है, अगर मैं एक और दस्तावेज़ खोलता हूँ, जबकि यह एक खुला है, मुझे निम्न त्रुटि मिलती है:

enter image description here

डिबगिंग से पता चलता है कि मुद्दा कहां है।

enter image description here

मैं VBA में नया हूं, लेकिन मैंने सभी शीट्स संदर्भों से पहले ActiveSheet जोड़ने की कोशिश की और इस त्रुटि को कम नहीं किया। मैं यह कैसे सुनिश्चित कर सकता हूं कि यह केवल उस दस्तावेज़ में "डैशबोर्ड" शीट पर चलता है जिसमें स्क्रिप्ट स्थित है?

3
THE JOATMON 18 नवम्बर 2015, 20:48

2 जवाब

सबसे बढ़िया उत्तर

ऐसा इसलिए है क्योंकि यदि आप सिर्फ Sheets लिखते हैं तो यह ActiveWorkbook.Sheets के समान है। इसलिए आपको Workbooks("MyBook").Sheets("SheetName") वर्कबुक क्वालीफायर कुछ जोड़ना होगा।

या आप ThisWorkbook.Sheets("SheetName") का उपयोग कर सकते हैं। फिर वर्कबुक का शीट्स संग्रह जहां VBA कोड चल रहा है, उसका उपयोग किया जाएगा।

7
Daniel Dušek 18 नवम्बर 2015, 18:03

कोड को निम्न में बदलें:

Private Sub Worksheet_Calculate()
    If ThisWorkbook.Sheets("Dashboard").Range("Z11").Value > 0 Then
        ThisWorkbook.Sheets("Dashboard").Shapes("tileOverdueTasks").Fill.ForeColor.RGB = RGB(185, 0, 0)
    Else
        ThisWorkbook.Sheets("Dashboard").Shapes("tileOverdueTasks").Fill.ForeColor.RGB = RGB(0, 185, 0)
    End If
End Sub

"ThisWorkbook" के साथ कार्यपुस्तिका को संदर्भित करके, कोड केवल उस कार्यपुस्तिका में जांच करेगा जो कोड में रहता है।

3
Scott Holtzman 18 नवम्बर 2015, 17:59