2012-12-12 11 views
5

मेरे पास कुछ चार्ट हैं जिनमें एक्स मान टेक्स्ट हैं और वाई मान संख्यात्मक हैं, के आधार पर डेटा बिंदु के लिए एक्सेल vba बदलना बार चार्ट रंग। मैं प्रत्येक बार लाल रंग को रंगना चाहता हूं यदि बार के लिए वाई मान शून्य से कम है, तो शून्य से अधिक या बराबर ग्रीन। इसके अलावा, यदि बार का एक्स मान "नेट परिवर्तन" है, तो मुझे बार पीले होने की आवश्यकता है। मैंने पिछले स्टैक ओवरफ्लो थ्रेड में दिशानिर्देशों का पालन किया: Changing Bar colors using VBA based on category labelपॉइंट वैल्यू

मुझे रन-टाइम त्रुटि मिल रही है 451 संपत्ति प्रक्रिया को परिभाषित नहीं करने दें और संपत्ति प्राप्त करने की प्रक्रिया किसी ऑब्जेक्ट को वापस नहीं करती है।

मेरे कोड के नीचे है:

For chartIterator = 1 To ActiveSheet.ChartObjects.count 

    For pointIterator = 1 To ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator).Chart.SeriesCollection(1).Points.count 
     If ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator).Chart.SeriesCollection(1).Values(pointIterator) >= 0 Then 
      ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator).Chart.SeriesCollection(1).Points(pointIterator).Interior.Color = _ 
       RGB(146, 208, 80) 
     Else 
      ActiveWorkbook.Sheets("Due To Chart").ChartObjects(chartIterator).Chart.SeriesCollection(1).Points(pointIterator).Interior.Color = _ 
       RGB(255, 0, 0) 
     End If 
    Next pointIterator 

Next chartIterator 

त्रुटि यदि बयान पर आता है। मैंने भी कोशिश की। पॉइंट्स (प्वाइंट इटरेटर)। वैल्यू, जिसने मुझे "इस ऑब्जेक्ट के लिए परिभाषित नहीं किया गया संपत्ति या विधि" त्रुटि मिली।

मैं क्या गलत कर रहा हूं पर कोई विचार?

आपकी मदद के लिए अग्रिम धन्यवाद।

उत्तर

6

आप सीरीज़कोलेक्शन (1) के उपयोग में परेशानी में भाग रहे हैं। वैल्यूज, जिसे आप एक सरणी के रूप में देख रहे हैं जिसे आप फिर से चालू कर सकते हैं। इसके बजाए, यह एक ऐसा फ़ंक्शन है जो श्रृंखला चयन में बिंदुओं के मानों को वापस कर देता है।

फ़ंक्शन के परिणामों को एक सरणी चर में निर्दिष्ट करने की आवश्यकता है, फिर सरणी में मान शून्य से कम या उससे कम है या नहीं, यह जांचने के लिए सरणी पर फिर से सक्रिय करें। फिर, आप चार्ट बिंदुओं पर रंग असाइन कर सकते हैं।

इस कोड चाल करना चाहिए:

Sub color_chart() 

    Dim chartIterator As Integer, pointIterator As Integer, _ 
     seriesArray() As Variant 

    For chartIterator = 1 To ActiveSheet.ChartObjects.Count 
     seriesArray = ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator). _ 
         chart.SeriesCollection(1).Values 

     For pointIterator = 1 To UBound(seriesArray)    

      If seriesArray(pointIterator) >= 0 Then 
       ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator). _ 
       chart.SeriesCollection(1).Points(pointIterator).Interior.Color = _ 
       RGB(146, 208, 80) 
      Else 
       ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator). _ 
       chart.SeriesCollection(1).Points(pointIterator).Interior.Color = _ 
       RGB(255, 0, 0) 
      End If 

     Next pointIterator 

    Next chartIterator 

    End Sub 
+0

यह पूरी तरह से धन्यवाद काम किया! – user1899231

1

यहाँ एक विकल्प है कि VBA की आवश्यकता नहीं है है, और सूत्रों अद्यतन के रूप में गतिशील रूप से काम करता है। इस ट्यूटोरियल में "सशर्त प्रारूपित बार चार्ट" उदाहरण देखें:

Conditional Formatting in Excel Charts

+0

मैंने इसे मूल रूप से नहीं देखा, लेकिन यह वास्तव में बहुत अच्छा है। धन्यवाद! – user1899231

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