2012-12-28 9 views
5

グラフを自動的に作成するいくつかのVBAコードを記述しました。このグラフの軸の1つは、通常のラベルではなくグラフィックです。グラフィックを画像として保存し、.Copyおよび.Pasteメソッドを使用してこの画像のコピーをグラフに表示します。vbaを使用してExcel 2010の回転した図形を特定の場所に移動する方法

ここでは混乱するところです。 .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

コピーしてグラフに貼り付けて配置する前に、イメージの回転とサイズ変更が終了しました。 leftとtopプロパティを直接設定するのではなく、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

2年半後...あなたは*答え*を見つけました。 – bonCodigo

1

シェイプがセル上で整列/停止する位置にチャートを配置することは可能ですか?

YES IFは、ここで提案です: -

  • あなたはcellshapeを配置することができます。次に、必要なサイズに調整します。回転させる。
  • 次にbring forwardプロパティをChartに変更してください。
  • グループ Chart
  • Shape

PS:私はマクロを記録しました。しかし、あなたの質問の正確な画像(=あなたのsheeet/chart/imageがどのように見えているか)を見せることができれば最高です。

+0

あなたは正しいと思います。私は後で、スクリプトがアクションを実行しているときに、画像がチャートの側面に当たっていたので、私が期待したことをしていない可能性があることを認識しました。それをチャートに配置する前にサイズを決めて配置すると、その問題は解決されます。私は月曜日にこれを試してみるつもりです。 –

関連する問題