我目前将 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/