2012-12-28 78 views
5

我已經寫了自動創建一個圖表一些VBA代碼旋轉的形狀移動到特定位置,在2010年的Excel。此圖表上的其中一個軸不使用普通標籤,而是使用圖形。我將圖形存儲爲圖像,並使用.Copy和.Paste方法將此圖像的副本放到圖表上。如何使用VBA

這裏就是它得到混亂。我需要旋轉圖像以使其與軸對齊(使用.rotation屬性)。但是,當我設置.top和.left屬性時,形狀不會以我期望的方式結束。事實上,將屬性設置爲0和0並不符合我的期望。我試圖改變我在圖像對象上設置屬性的方式的順序,但它只出現在不同的(錯誤的)位置。

我敢肯定,我錯過了VBA/Excel如何將對象放置到相對於設置頂部和左側屬性的一些重要方面。基本上我的目標是使在具有相同寬度的繪圖區的高度圖表左側的圖像(由於圖像旋轉,我從理論上這將使相同的大小)。

此代碼不起作用:

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

我在複製並粘貼到圖表之前結束了旋轉和調整圖像的大小,然後進行了定位。我必須使用IncrementLeft和IncrementTop方法,而不是直接設置左側和頂部屬性,因爲它沒有達到預期的效果。

當粘貼到圖表中時,對象始終在左上角,所以我可以通過少量我想要的作爲我想要的邊距增加到左邊,然後增加頂部的值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

是否有可能將圖表對齊到一個位置,在該位置上形狀可以在單元格上對齊/對齊?

IF YES,那麼這裏有一個建議: -

  • 你可以定位shapecell。然後根據需要調整大小。並旋轉。
  • 然後更改其bring forward屬性顯示在Chart
  • 下一頁集團ChartShape

PS:我錄製的宏。然而這是最好的,如果你能告訴我們,你的確切圖片(=您的sheeet /圖表/圖像看起來應該像)你的問題。

+0

我認爲你是對的。後來我意識到它可能沒有達到我預期的效果,因爲當腳本正在執行操作時,圖像碰到了圖表的兩側。在將其放置在圖表上之前調整大小和定位將消除該問題。星期一我會試試這個。 –