Excel VBA 未获取正确的形状尺寸

Excel VBA 未获取正确的形状尺寸

我有一个宏,用于将形状放置在我的 excel 文件的打印区域内。简而言之,为此,我使用所选形状的宽度 ( Application.Selection) 并将其从打印区域宽度中删除,然后将其除以所选形状的总数。

97% 的时间它都能正常工作。3% 的时间它不能正常工作是因为 excel 似乎没有得到正确的形状尺寸。宽度偏离了约 50%。

所以我想知道这是怎么发生的以及为什么会发生?这似乎是随机的,尽管当它发生时,只有当选择了多个形状时才会发生。如果我运行脚本时只选择有问题的形状,尺寸就没问题了。

其他人也遇到过这种情况吗?怎样解决?

- 这是 Excel 中形状的大小:

Excel 中的形状大小

从这些维度和知道 excel vba 中的尺寸是它们将转换为高度 ≈ 92.41 和宽度 ≈ 191.91。

- 当选择两个形状(存储在集合中)时,这是我从 vba 获取的大小collShp

选择两种形状

- 当仅选择有问题的形状时:

仅选择有问题的形状

+++编辑添加一些代码:+++ 这是代码中与形状混淆的部分。它看起来像是随机的,因为我刚刚打开了同一个文件,现在大小没问题了……形状是简单的屏幕截图,如“printscreened”,并直接粘贴到 excel 文件中。

Sub centerShapeCompressed()

    If VarType(Application.Selection) <> 9 Then Exit Sub 'Type "9" is type "Object"

    Dim shp As Object

    Dim xlapp As Application
    Set xlapp = Excel.Application

    On Error Resume Next
    Debug.Print Application.Selection.Count 'if "Selection" contains less than 2 -> throws an error

    If Err.Number = 0 Then 'If Selection.Count > 1

        On Error GoTo 0

        Dim collShp As Collection
        Set collShp = New Collection
        For Each shp In Application.Selection
           collShp.Add shp, shp.Name
        Next shp

    Else

        Set shp = Application.Selection

    End If

End Sub

相关内容