श्रृंखला लाइन रंग, मार्कर भरण और मार्कर रेखा रंग सेट करने के लिए Excel 2010 VBA का उपयोग कैसे करें


3

मैं एक पूर्वनिर्धारित (यानी, मेरे द्वारा परिभाषित) मानक के अनुसार एक एक्सेल 2010 वीबीए सबरूटीन को प्रारूप चार्ट में लिखने की कोशिश कर रहा हूं। मैं जिन विशेष विशेषताओं को सेट करना चाहता हूं, वे केवल वे विशेषताएँ हैं, जो प्रारूप डेटा श्रृंखला विंडो के माध्यम से उपलब्ध हो जाती हैं, जो एक डेटा श्रृंखला पर डबल-क्लिक करने पर खुलती हैं।

विभिन्न गुणों के नामों की खोज करने के प्रयास में, जिन्हें मुझे सेट करने की आवश्यकता होगी, मैंने मैक्रो के रूप में उन परिवर्तनों को दर्ज किया जो मैं डेटा श्रृंखला की शैली में बना रहा था। हालाँकि, हालांकि मैं स्वरूप डेटा श्रृंखला विंडो के माध्यम से लाइन रंग, और मार्कर लाइन रंग को अलग-अलग रंगों में सेट कर सकता हूं, रिकॉर्ड किए गए मैक्रो (नीचे एनोटेट) लाइन रंग और मार्कर लाइन रंग के लिए पहचान की गई (अप्रभेद्य) वस्तुओं को संदर्भित करता है।

इसके अलावा, जब मैं वास्तव में मैक्रो चलाता हूं, तो दो समस्याएं हैं। सबसे पहले, इस तथ्य के बावजूद कि रिकॉर्ड किया गया मैक्रो मार्कर-भरने वाली संपत्ति को संदर्भित करता है .ForeColor.Brightness, मैक्रोज़ निष्पादित होने पर वह रेखा एक त्रुटि पैदा करती है। त्रुटि कहती है, "मेथड कलरफर्मैट की विधि ब्राइटनेस विफल"। दूसरा रिकॉर्ड किया गया कोड वास्तव में एक साथ मार्कर लाइन का रंग और श्रृंखला के लिए मुख्य लाइन सेट करता है, इसलिए रिकॉर्ड किए गए कोड में, वे दोनों पहले सेट होते हैं जो मुझे आशा थी कि मार्कर होगा लाइन रंग, और फिर दोनों मैं मुख्य लाइन रंग के लिए क्या चाहता था पर सेट।

मैं मार्कर भरण, मार्कर लाइन रंग और रेखा रंग कैसे सेट करूं।

Sub Macro1()
'
' Macro6 Macro
' On Sheet 1 there is a single embedded chrt 
  ActiveSheet.ChartObjects("Chart 1").Activate
  ActiveChart.SeriesCollection(1).Select
  With Selection.Format.Fill
    .Visible = msoTrue
    .ForeColor.ObjectThemeColor = msoThemeColorText1
    .ForeColor.TintAndShade = 0
'    The following (recorded line produces an error)
    .ForeColor.Brightness = 0.5
    .Transparency = 0
    .Solid
  End With
  With Selection.Format.Line
    .Visible = msoTrue
    .ForeColor.ObjectThemeColor = msoThemeColorAccent5
    .ForeColor.TintAndShade = 0
    .ForeColor.Brightness = 0.400000006
    .Transparency = 0
  End With
  With Selection.Format.Line
    .Visible = msoTrue
    .ForeColor.ObjectThemeColor = msoThemeColorAccent6
    .ForeColor.TintAndShade = 0
    .ForeColor.Brightness = -0.5
    .Transparency = 0
  End With
End Sub

आपके अंतिम दो withसमान ऑब्जेक्ट को संबोधित कर रहे हैं
रेस्टाफैरियन

@ रेस्टाफेरियन, मुझे नहीं लगता कि आपने प्रश्न पढ़ा है। मुझे पता है कि वे एक ही वस्तु को संबोधित करते हैं। यह मेरे सवाल का पूरा बिंदु है! दो अलग-अलग वस्तुओं को बदलने वाली घटनाओं की मैक्रो रिकॉर्डिंग एक मैक्रो का उत्पादन करती है जो एक ही वस्तु को दो बार संदर्भित करती है? और मैक्रो को मैन्युअल रूप से किए गए परिवर्तनों को प्रभावित करने के लिए किन वस्तुओं को संदर्भित किया जाना चाहिए?
user02814

मैंने इससे संघर्ष किया है। VBA चार्ट तत्वों के प्रारूपण को संभालने के तरीके में अंतराल हैं, जब कार्यालय 2007 को बाजार में लाया गया था। कमियों को कभी भी ठीक नहीं किया गया है, .TintAndShadeसंगतता के लिए छोड़े जाने के अलावा अन्य टूटी हुई है लेकिन 2010 में .Brightnessकार्यक्षमता के लिए प्रतिस्थापित किया गया है ।
जॉन पेल्टियर

जवाबों:


4

ऐसा लगता है कि ये स्वरूपण विकल्प एक्सेल 2010 और 2013 में कुछ अजीब तरह से लागू किए गए हैं:

  1. रेखा का रंग और गुण के रूप में मैक्रो कोड उन्हें दर्ज हो गया है स्थापित कर रहे हैं, का उपयोग कर Series.Formatवस्तु और उसके बच्चों ( Fill, Glow, Shadow, आदि [1])।
  2. श्रृंखला में सभी मार्करों के लिए मार्कर भरण रंग के साथ Series.MarkerBackgroundColorया सेट किया गया है Series.MarkerBackgroundColorIndex। इसी तरह, श्रृंखला में सभी मार्करों के लिए मार्कर लाइन रंग के साथ Series.MarkerForegroundColorया सेट किया गया है Series.MarkerForegroundColorIndex। [2]
  3. वैकल्पिक रूप से, मार्कर फिल और लाइन रंग व्यक्तिगत रूप से Series.Points(n).Format.Fillऔर Series.Points(n).Format.Lineवस्तुओं के माध्यम से सेट किए जा सकते हैं। हालांकि , कम से कम एक्सेल 2013 में, बदलने से Series.Points(n).Format.Line.ForeColor भी संबंधित डेटा बिंदु से पहले लाइन सेगमेंट का रंग तुरंत बदल जाता है।

# 2 के गुण पूर्व एक्सेल डोम से होल्डओवर की तरह दिखते हैं, हालांकि किसी आरजीबी मूल्य को स्वीकार करने .MarkerForegroundColorऔर .MarkerBackGroundColorस्वीकार करने के मामले में विस्तारित कार्यक्षमता के साथ । # ३ में से जो २०१० में एक्सेल २०१ और नए में पाए गए कॉन्फ़िगरेशन के नए स्तर के अनुरूप हैं, लेकिन वे छोटी गाड़ी में दिखाई देते हैं। बग्गीनेस का एक कष्टप्रद पहलू यह है कि ऐसा प्रतीत होता है कि मार्कर लाइन के रंग श्रृंखला रेखा के रंग के साथ समस्याग्रस्त रूप से जुड़े हुए हैं - जहां तक ​​मैं बता सकता हूं, मार्कर लाइन के रंगों को प्रभावित किए बिना लाइन रंग को बदलना असंभव है, और इसके विपरीत विपरीत। विशेष रूप से, यह प्रतीत होता है कि आईबीए का उपयोग करके मार्कर लाइन रंग में बिंदु-दर-बिंदु भिन्नताएं लागू करते समय एक समान श्रृंखला रेखा रंग प्राप्त करना असंभव है। (फिर से, मैं यहाँ एक्सेल २०१३ में परीक्षण कर रहा हूँ; २०१० अलग तरीके से व्यवहार कर सकता है।)

किसी भी घटना में, उन स्थितियों में जहां पॉइंट-बाय-पॉइंट कलर ट्विकिंग की आवश्यकता नहीं होती है, मार्कर फिल या लाइन रंगों को प्रभावित किए बिना लाइन रंग में परिवर्तन करने के लिए एक सहायक फ़ंक्शन जैसे निम्न उपयोगी हो सकता है (यहां, newLineColor निर्दिष्ट है लंबे आरजीबी मान के रूप में [3]):

Sub ChangeLineColorOnly(srs as Series, newLineColor as Long)
    Dim oldMkrFill as Long, oldMkrLine as Long

    ' Store old marker colors
    oldMkrFill = srs.MarkerBackgroundColor
    oldMkrLine = srs.MarkerForegroundColor

    ' Set the series ForeColor
    srs.Format.Fill.ForeColor.RGB = newLineColor

    ' Restore the old marker colors
    srs.MarkerBackgroundColor = oldMkrFill
    srs.MarkerForegroundColor = oldMkrLine

End Sub

उपरोक्त हेल्पर फ़ंक्शन का एक वैकल्पिक संस्करण आसानी से स्कीमर के रूप में निर्दिष्ट रंगों को समायोजित करने के लिए लिखा जा सकता है [4], या केवल मार्कर लाइन रंग, आदि को संग्रहीत करने के लिए।

के रूप में .ForeColor.Brightnessगड़बड़ है, यह शायद Excel 2010 रिहाई के विकास में 'मैक्रो रिकॉर्ड करें' कार्यक्षमता के लापरवाह recoding से हुई। यह संभवत: केवल कुछ प्रकार के चार्ट के लिए रिकॉर्ड किए गए VBA कोड में डाला जाना चाहिए जहां .Brightnessएक संशोधित विशेषता है।

[१] http://msdn.microsoft.com/en-us/library/office/ff839279(v=office.14).aspx
[2] http://msdn.microsoft.com/en-us/library/ office / ff840677 (v = office.14) .aspx
[3] http://msdn.microsoft.com/en-us/library/zc1dyw8b%28v=vs.90%29.aspx
[4] http: // msdn .microsoft.com / en-us / पुस्तकालय / कार्यालय / ff836764 (v = office.14) .aspx


बेशक, .Brightnessएक्सेल यूआई के माध्यम से मैन्युअल रूप से संशोधित करने के लिए एक वैध विशेषता है; यह सिर्फ VBA में टूटता है।
जॉन पेल्टियर

@JonPeltier हमेशा के लिए जब से मैंने यह लिखा है, लेकिन IIRC कुछ चार्ट प्रकार का समर्थन नहीं करते हैं .Brightnessऔर इस प्रकार यह उन मामलों में एक अपरिभाषित संदर्भ बन जाता है; इस प्रकार ओपी की स्थिति में वीबीए द्वारा फेंकी गई संपत्ति (या जो भी) त्रुटि है।
hBy2Py

मुझे नहीं लगता कि यह चार्ट कुछ तत्वों के समान है। मैंने केवल .Brightnessएक त्रुटि फेंकने को देखा है जब आप .Brightnessमार्कर के भरण (पृष्ठभूमि) रंग को समायोजित करने का प्रयास करते हैं (ठीक है, हाँ, केवल कुछ चार्ट प्रकारों में मार्कर होते हैं, लेकिन यह सभी मार्कर हैं और कुछ नहीं)। यह ठीक रिकॉर्ड करता है, वापस खेलने में विफल रहता है। स्वयं पर ध्यान दें: प्रयास करें .TintAndShade
जॉन पेल्टियर

@JonPeltier अच्छी तरह से हो सकता है। मैंने इस बात की कठोर जांच नहीं की कि वीबीए को किसने उड़ाया और क्या ठीक काम किया।
hBy2Py

हाँ, .TintAndShadeकोई प्रभाव नहीं पड़ा। इसलिए हम या तो उपयोग नहीं कर सकते या .Brightnessमार्कर फिल के लिए निर्मित रंग को समायोजित कर सकते हैं । मार्कर सीमाओं के लिए, संयोग से, दोनों .Brightnessऔर .TintAndShadeरेखा रंग की चमक को प्रभावित, लेकिन यह भी एक पिछले रंग के मार्कर सीमा वापस। इसलिए वे अनिवार्य रूप से बेकार भी हैं।
जॉन पेल्टियर

0

यह मेरे लिए काम करता है।

   ActiveChart.FullSeriesCollection(1).Select
    With Selection.Format.Fill
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 0, 0)
        .Transparency = 0
        .Solid
    End With
    With Selection.Format.Line
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 0, 0)
        .Transparency = 0
    End With

-1

मैंने सोचा था कि यह मेरे लिए भी काम करता है, यह भी, कि यह लाल रंग कोई फर्क नहीं पड़ता कि क्या आरजीबी मूल्यों मैं डाल में बदल जाता है।

ActiveChart.FullSeriesCollection (1)। चयन के साथ चयन करें .ormat.Fill। अदृश्य = msoTrue .ForeColor.RGB = RGB (255, 0, 0) .Transparency = 0। एकीकृत अंत के साथ।

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