作者:fyy1784502 | 来源:互联网 | 2023-05-20 11:38
我目前正在将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
MikeD..
8
默认情况下,形状的宽高比(关系W/H)被锁定 ...所以实际上你.Height
和它们的.Width
设置都会改变两个尺寸(除非它们从开始就是方形).如果您想要完美的正方形,无论您的形状的原始W/H比率如何,请解锁纵横比.
建议:
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
经过测试的原始PDF尺寸的PDF ...一个不必喜欢最终外观;-)
如果要保持纵横比但仍希望将OLEObject放入30x30网格中,则需要将一个设置应用于较大的维度,例如
' ....
If OleObj.Width > OleObj.Height Then
OleObj.Width = 30
Else
OleObj.Height = 30
End If
' ....
然后-水平居中的对象你会添加(30 - OLEObj.Width)/2
到oCell.Left
等等...
1> MikeD..:
默认情况下,形状的宽高比(关系W/H)被锁定 ...所以实际上你.Height
和它们的.Width
设置都会改变两个尺寸(除非它们从开始就是方形).如果您想要完美的正方形,无论您的形状的原始W/H比率如何,请解锁纵横比.
建议:
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
经过测试的原始PDF尺寸的PDF ...一个不必喜欢最终外观;-)
如果要保持纵横比但仍希望将OLEObject放入30x30网格中,则需要将一个设置应用于较大的维度,例如
' ....
If OleObj.Width > OleObj.Height Then
OleObj.Width = 30
Else
OleObj.Height = 30
End If
' ....
然后-水平居中的对象你会添加(30 - OLEObj.Width)/2
到oCell.Left
等等...