我目前将 PDF 文件和图像作为 OLE 对象附加到我的 Excel 工作表中,并试图控制它们的大小。 (我希望图标沿着网格出现)

问题是即使每个 OLEObject 都应该满足以下规范,但它们有时大小不同。某些 pdf 的长度或宽度大于图像文件。

我如何确保它们是一致的?

Public Sub OLEObjectNamesReturn()

Dim Count As Integer
Dim Space As Integer
Count = 23
Space = 0

For Each oleObj In ActiveSheet.OLEObjects
    Select Case oleObj.Name
    Case "CheckBox21"
    Case "CheckBox22"
    Case "CommandButton21"
    Case "CommandButton22"
    Case Else
        Dim ObjectName As String
        ObjectName = oleObj.Name
        Set oCell = ActiveSheet.Range("P" & Count)
        ActiveSheet.Shapes.Range(Array(ObjectName)).Select
        ActiveSheet.Shapes(ObjectName).Height = 30
        ActiveSheet.Shapes(ObjectName).Width = 30
        ActiveSheet.Shapes(ObjectName).Top = oCell.Top + 7 + Space
        ActiveSheet.Shapes(ObjectName).Left = oCell.Left + 7
        Count = Count + 1
        Space = Space + 15
    End Select
Next
End Sub

最佳答案

默认情况下,形状有它们的 纵横比 (relation W/H) 锁定 ... 所以实际上你的 .Height.Width 设置都会 改变两个 尺寸(除非它们从一开始就是正方形)。如果您想要完美的正方形,无论您的形状的原始宽高比是多少,请解锁纵横比。

建议:

Sub Test()
Dim OleObj As OLEObject

    Set OleObj = ActiveSheet.OLEObjects(1)     ' embedded PDF A4 ... not icon
    OleObj.ShapeRange.LockAspectRatio = msoFalse
    OleObj.Height = 30
    OleObj.Width = 30

End Sub

用最初 A4 大小的 PDF 进行了测试......人们不必喜欢最终的外观;-)

如果您想保持纵横比,但仍想将 OLEObject 放入 30x30 网格中,则需要将一个设置应用于更大的维度,例如
' ....

If OleObj.Width > OleObj.Height Then
    OleObj.Width = 30
Else
    OleObj.Height = 30
End If

' ....

然后 - 将对象水平居中,您将 (30 - OLEObj.Width)/2 添加到 oCell.Left 等等......

关于vba - OLEObject 高度和宽度不一致,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28750196/

10-13 00:12