5

グラフを自動的に作成するVBAコードをいくつか作成しました。このグラフの軸の1つは、通常のラベルではなくグラフィックを使用しています。グラフィックを画像として保存し、.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

ここで何が欠けていますか?

4

2 に答える 2

1

図形をセル上に配置できる位置にグラフを配置することは可能ですか?

はいの場合、ここに提案があります:-

  • shapeに配置できcellます。次に、必要に応じてサイズを調整します。そして回転します。
  • bring forward次に、に表示されるプロパティを変更しますChart
  • 次のグループ ChartShape

PS:マクロを記録しました。ただし、質問の正確な画像(=シート/チャート/画像がどのように見えるか)を表示できれば最高です。

于 2012-12-28T17:24:50.060 に答える
1

チャートにコピーして貼り付けてから配置する前に、画像を回転してサイズを変更することになりました。leftプロパティとtopプロパティを直接設定するのではなく、IncrementLeftメソッドとIncrementTopメソッドを使用する必要がありました。これは、目的の効果が得られなかったためです。

チャートに貼り付けると、オブジェクトは常に左上隅に表示されるため、必要なマージンとして左に少しずつインクリメントし、PlotArea.topの値でトップをインクリメントできます。プロット領域に合わせます。

また、画像のコピーを作成するときに、新しいシートやグラフにコピーしたときに参照した「名前」が保持されていることにも驚きました。これは、画像がチャート上に表示された後、画像を配置する場合に特に便利です。

また、手順の最後で、他のすべてが配置および整列された後、またはシリーズの1つのデータラベルを配置したときに、これらのコードが正しく表示されない場合に、このコードを実行する必要がありました。

これが私が使用することになったコードです:

    '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
于 2015-05-28T00:43:38.747 に答える