ChartObject
またはの幅と高さを設定しても、それShape
はできません。どちらも、埋め込まれたグラフである白い長方形の内側の部分にすぎないようです。また、ChartArea
私が興味を持っているオブジェクトではないようです。
次の例でエクスポートされたファイルのサイズを800x600にします(サイズが誤って収まるまで、エクスポートされた画像や試行錯誤を再スケーリングすることを意味するわけではありません)。私が見落としたチャートの周りに何かオブジェクトがあるに違いありません。
Sub mwe()
Dim filepath As String
Dim sheet As Worksheet
Dim cObj As ChartObject
Dim c As Chart
Dim cShape As Shape
Dim cArea As chartArea
filepath = Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, "\"))
Set sheet = ActiveSheet
Set cObj = sheet.ChartObjects(1)
Set c = cObj.chart
Set cShape = sheet.Shapes(cObj.Name)
Set cArea = c.chartArea
cObj.Width = 800
cObj.Height = 400
MsgBox cArea.Width & " x " & cArea.Height '793x393
c.Export filepath & "test1.png" '1067x534, this is also the size on screen
cShape.Width = 800
cShape.Height = 400
MsgBox cArea.Width & " x " & cArea.Height '794x393
c.Export filepath & "test2.png" '1068x534, this is also the size on screen
End Sub
アップデート:
と同じChartObject
ものにShape
属するものはChart
すでにWorksheet
親として持っていますが、幅と高さはピクセルではなくポイントで指定されています。ここで、1ポイント= 1/72インチであり、ほとんどの場合、Windowsは1つあたり96ピクセルを想定しているようです。インチ。
スティーブのコメントのおかげで、私は現在、非常に信頼できる以下を使用しています。
エクスポート時にアクティブ化されていないAChartObject
は、幅と高さが本来より1高いファイルを生成しているようです。
要因px2ptH
をpx2ptV
自動的に決定する方法を見つけることは残っています。
Sub mwe()
Dim filepath As String
Dim sheet As Worksheet
Dim cObj As ChartObject
Dim c As Chart
Dim px2ptH As Double: px2ptH = 72 / 96
Dim px2ptV As Double: px2ptV = 72 / 96
Dim w As Double: w = 800 * px2ptH
Dim h As Double: h = 400 * px2ptV
filepath = Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, "\"))
Set sheet = ActiveSheet
Set cObj = sheet.ChartObjects(1)
Set c = cObj.Chart
'otherwise image size may deviate by 1x1
cObj.Activate
cObj.Width = w
cObj.Height = h
c.Export filepath & "test.png"
End Sub