vba:如何设置excel图表的宽度和高度(以像素为单位)?

时间:2013-01-31 15:37:12

标签: excel vba excel-vba charts dimensions

一个看似简单的问题。但设置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的{​​{1}}已经将Chart作为父级。但宽度和高度没有像我假设的那样以像素为单位指定,而是以点为单位,其中1点= 1/72英寸。

并且大多数时候,窗口似乎假设每英寸96像素。

感谢史蒂夫的评论我现在正在使用以下内容,这是非常可靠的。导出时未激活的Worksheet似乎会产生宽度和高度比应该高1的文件。

仍然需要了解如何自动确定因素ChartObjectpx2ptH

px2ptV

1 个答案:

答案 0 :(得分:9)

尺寸以点为单位,而不是像素。 72点到英寸。

800像素/ 72 = 11.11111 ....导出图像的大小将以英寸/计算机显示器的dpi为单位,通常为96(与您的情况一样,但不能总是计算在内)在它上面...使用WIN API调用来查找当前值)

Randy Birch发布了可用于访问WinAPI调用以获取屏幕分辨率等的代码。

转到http://vbnet.mvps.org/index.html并使用左侧的搜索功能查找GETDEVICECAPS