vba

2012-12-28 25 views
5

का उपयोग कर एक्सेल 2010 में एक विशिष्ट स्थान पर घूर्णन आकार को कैसे स्थानांतरित करें मैंने कुछ वीबीए कोड लिखा है जो स्वचालित रूप से एक चार्ट बनाता है। इस चार्ट पर अक्षों में से एक सामान्य लेबल का उपयोग नहीं करता है बल्कि ग्राफिक का उपयोग करता है। मैंने ग्राफ़िक को एक छवि के रूप में संग्रहीत किया है और मैं चार्ट पर इस छवि की एक प्रति प्राप्त करने के लिए। कॉपी और .Paste विधियों का उपयोग करता हूं।vba

यहां यह भ्रमित हो जाता है। मुझे अक्ष के साथ गठबंधन करने के लिए छवि को घुमाने की आवश्यकता है (.rotation संपत्ति का उपयोग कर)। लेकिन जब मैं .top और .left गुण सेट करता हूं तो आकार समाप्त नहीं होता है जहां मैं अपेक्षा करता हूं। वास्तव में 0 और 0 गुणों को सेट करने से मैं ऐसा नहीं करता जो मैं अपेक्षा करता हूं। मैंने छवि ऑब्जेक्ट पर गुण सेट करने के तरीके को बदलने का प्रयास किया है, लेकिन यह केवल एक अलग (गलत) स्थान पर दिखाई देता है।

मुझे यकीन है कि मैं कुछ महत्वपूर्ण पहलू याद कर रहा हूं कि कैसे वीबीए/एक्सेल ऑब्जेक्ट को ऊपर और बाएं गुणों को सेट करने के लिए ऑब्जेक्ट रख रहा है। असल में मेरा लक्ष्य चार्ट के बाईं तरफ छवि को साजिश क्षेत्र की ऊंचाई के समान चौड़ाई के साथ बनाना है (क्योंकि छवि घुमाया गया है, इसलिए मैं इसे एक ही आकार में बना दूंगा)।

इस कोड काम नहीं करता:

Sheets(ImageSheet).Shapes("agreement").Copy 
c.Chart.Paste 
c.Chart.Shapes(1).Rotation=270 
c.Chart.Shapes(1).width = c.Chart.PlotArea.height 
c.Chart.shapes(1).left = 5 
c.Chart.Shapes(1).top = c.Chart.PlotArea.top 

मैं भी इस कोड

c.chart.Shapes(1).top = c.chart.PlotArea.top + c.Chart.PlotArea.height 

क्योंकि मैंने सोचा कि शायद इसके बारे में ऊपरी-बाएं कोने के रूप में "टॉप" की गणना की गई थी की कोशिश की है छवि ऑब्जेक्ट जब यह घुमाया नहीं जाता है (270 डिग्री घूर्णन इस बिंदु को उस स्थान पर बनाता है जहां इसे साजिश क्षेत्र के नीचे से संरेखित करना चाहिए)। लेकिन ऐसा नहीं करता जो मैंने अपेक्षा की थी।

छवि एक पतला आयताकार है जो अक्ष के लिए एक लेबल के रूप में कार्य करता है। चार्ट इस तरह से समाप्त हो जाएगा: http://imgur.com/NrSXR और धुरी लेबल छवि इस तरह की होगी http://imgur.com/08EWU

मुझे यहां क्या याद आ रही है?

+0

+1 सोच समझकर लिखा प्रश्न के लिए:

यहाँ कोड है कि मैं का उपयोग कर समाप्त हो गया है। इससे मदद मिल सकती है यदि आप अपनी छवि के साथ कुछ डमी फ़ाइल को लिंक प्रदान कर सकते हैं। –

उत्तर

1

मैंने चार्ट पर प्रतिलिपि बनाने और चिपकाने से पहले छवि को घूर्णन और आकार बदलना शुरू कर दिया और फिर इसे स्थितिबद्ध कर दिया। मुझे बाएं और शीर्ष गुणों को सीधे सेट करने के बजाय वृद्धिशीलता और वृद्धि टोप विधियों का उपयोग करना पड़ा क्योंकि इसका वांछित प्रभाव नहीं था।

चार्ट में पेस्ट करते समय ऑब्जेक्ट हमेशा ऊपरी बाएं हाथ के कोने में समाप्त होता है, इसलिए मैं उस छोटी सी राशि से बाईं ओर बढ़ सकता हूं जो मैं चाहता था कि मार्जिन के रूप में मैं चाहता था और शीर्ष के ऊपर PlotArea.top प्लॉट क्षेत्र के साथ संरेखित करने के लिए।

मुझे यह भी हैरान था कि मेरी छवि की प्रतिलिपि बनाते समय मैंने "नाम" को बरकरार रखा, जैसा कि मैंने इसे नई शीट और चार्ट में कॉपी किया था। चार्ट पर होने के बाद यह छवि को स्थिति में रखने के लिए विशेष रूप से उपयोगी था।

मुझे अपनी प्रक्रिया के अंत में इस कोड को निष्पादित करने की भी आवश्यकता है, बाकी सब कुछ स्थानांतरित और गठबंधन करने के बाद, या जब मैंने अपनी श्रृंखला में से किसी एक के लिए डेटा लेबल्स लगाए तो वे सही ढंग से दिखाई नहीं देंगे।

'make a copy of the label image and refer to it with a variable for convenience 
    Sheets(ImageSheet).Shapes("maturity").Copy 
    i = Sheets(ImageSheet).Shapes.Count 
    Sheets(ImageSheet).Paste 
    Dim axisImage As Shape 
    Set axisImage = Sheets(ImageSheet).Shapes(i + 1) 

    'rotate and resize the image 
    With axisImage 
     .Rotation = 270 
     .width = c.Chart.PlotArea.height 
    End With 

    'cut and paste the new image to the chart 
    axisImage.Cut 
    c.Chart.Paste 

    'position it in the chart using IncrementTop and IncrementLeft because setting the properties directly does not have the desired effect 
    c.Chart.Shapes("maturity").IncrementTop c.Chart.PlotArea.top 
    c.Chart.Shapes("maturity").IncrementLeft c.Chart.PlotArea.left - c.Chart.Shapes("maturity").height 
+0

साढ़े सालों के बाद ... आपको एक * उत्तर * मिला है। – bonCodigo

1

क्या आपके चार्ट को उस स्थिति में संरेखित करना संभव है जहां आकार सेल पर संरेखित हो सकता है?

यदि हाँ तो यहाँ एक सुझाव है: -

  • आप एक cell में shape स्थिति सकता है। फिर आपको जो चाहिए उसे आकार समायोजित करें। और बारी बारी से।
  • फिर bring forward संपत्ति को Chart पर दिखाया जाए।
  • अगला समूहChart और Shape

पुनश्च: मैं एक मैक्रो रिकॉर्ड किया गया। हालांकि यह सबसे अच्छा है अगर आप हमें दिखा सकते हैं कि आपके प्रश्न के सटीक चित्र (= आपकी शीट/चार्ट/छवि कैसी दिखनी चाहिए)।

+0

मुझे लगता है कि आप सही हैं। मुझे बाद में एहसास हुआ कि शायद यह संभवतः ऐसा नहीं कर रहा था जो मुझे उम्मीद थी क्योंकि छवि चार्ट के किनारे पर टक्कर मार रही थी क्योंकि लिपि इस पर कार्रवाई कर रही थी। चार्ट पर रखने से पहले इसे आकार देने और स्थिति देने से उस मुद्दे को खत्म कर दिया जाएगा। मैं सोमवार को यह कोशिश करने जा रहा हूं। –