簡體   English   中英

如何使用vba將旋轉的形狀移動到excel 2010中的特定位置

[英]How to move a rotated shape to a specific location in excel 2010 using vba

我寫了一些自動創建圖表的VBA代碼。 此圖表中的一個軸不使用普通標簽,而是使用圖形。 我將圖形存儲為圖像,然后使用.Copy和.Paste方法將此圖像的副本存入圖表。

這是令人困惑的地方。 我需要旋轉圖像以使其與軸對齊(使用.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

我在這里錯過了什么?

您是否可以將圖表對齊到形狀可以在單元格上對齊/放置的位置?

如果是,那么這里有一個建議: -

  • 您可以將shape定位到cell 然后根據需要調整大小。 並旋轉。
  • 然后更改其bring forward屬性顯示在Chart
  • 下一步集團 ChartShape

PS:我錄了一個宏。 但是,如果您能夠向我們展示您的問題的確切圖片 (=您的Sheeet /圖表/圖像應該如何),那將是最好的。

在復制並粘貼到圖表然后定位之前,我最終旋轉並調整圖像大小。 我不得不使用IncrementLeft和IncrementTop方法,而不是直接設置left和top屬性,因為它沒有達到預期的效果。

當粘貼到圖表中時,對象總是在左上角結束,所以我可以向左增加我想要的少量我想要的邊距並將頂部增加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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM