OLEObject高度和宽度不一致

我目前将PDF文件和图像附加到我的Excel表格作为OLE对象,并试图控制它们的大小。 (我想图标出现在一个网格)

问题是,即使每个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 

默认情况下,graphics的宽高比 (关系W / H) 被locking …所以实际上.Height.Width设置都会改变这两个尺寸(除非它们是从开始的方形)。 如果你想要完美的正方形,不pipe你的形状是什么原始的W / H比率,解锁纵横比。

build议:

 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进行testing…一个人不必喜欢最后的样子;-)

如果你想保持纵横比,但仍然希望将OLEObject放入30×30的网格中,则需要将一个设置应用于较大的尺寸,例如

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

然后 – 水平居中你要添加的对象(30 - OLEObj.Width)/2oCell.Left等等…