确定VBA中图片对象的实际和显示大小

时间:2015-01-29 10:53:48

标签: excel vba excel-vba

在VBA中,我试图确定工作表上图片对象的实际大小和显示大小。由于缩放因子,显示的大小可能与实际大小不同。到目前为止,我已经找到了方法ScaleWidthScaleHeight,但我不想实际修改图片对象。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

不幸的是,原始测量似乎不是图片的公共属性。如果您不想修改原始图片,可以创建所述图片的副本,仅用于缩放目的。

此函数接受形状(在我们的例子中为图片)并返回单一类型(宽度和高度)的数组

Private Function GetOriginalMeasurements(ByRef myShape As Excel.Shape)
    Dim shpCopy As Excel.Shape
    Dim measurements(1) As Single

    Set shpCopy = myShape.Duplicate

    ' Reset original measurements
    shpCopy.ScaleHeight 1, msoTrue

    measurements(0) = shpCopy.width
    measurements(1) = shpCopy.height

    shpCopy.Delete

    GetOriginalMeasurements = measurements
End Function

Main()程序只是如何使用它的基本示例

Sub Main()
    Dim myShape As Excel.Shape
    Dim measurements() As Single
    Dim width As Single
    Dim height As Single

    Set myShape = ActiveWorkbook.ActiveSheet.Shapes(1)
    measurements = GetOriginalMeasurements(myShape)

    width = measurements(0)
    height = measurements(1)

    Debug.Print width
    Debug.Print height
End Sub

在我的电脑上,复制和删除形状是即时的,但如果你看到一些闪烁,你可能希望关闭该功能中的屏幕更新。