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

在VBA中,我试图确定工作表上图片对象的实际大小和显示大小。 由于比例因素的原因,显示的尺寸可能与实际尺寸不同。 到目前为止,我已经find了ScaleWidthScaleHeight方法,但我不想实际修改图片对象。 有任何想法吗?

不幸的是,原来的测量结果似乎并不是一张图片的公共财产。 如果您不想修改原始图片,则可以创build所述图片的副本,仅用于缩放目的。

这个函数接受一个形状(在我们的例子中是一个图片),并返回一个Singletypes的数组(宽度和高度)

 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 

在我的计算机上,形状的复制和删除是即时的,但是如果您看到一些闪烁,您可能希望closures该function中的屏幕更新。