目前,我正在将PDF文件和图像作为OLE对象附加到我的excel工作表中,并试图控制它们的大小。(我希望图标沿着网格出现)
问题是,即使每个OLEObject都应该满足以下规范,但有时它们的大小是不同的。一些pdfs具有更大的长度,或者比图像文件更宽。
我如何确保它们是一致的?
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
发布于 2015-02-26 20:00:16
默认情况下,形状的纵横比(关系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最初的A4大小..。一个人不必喜欢最后的样子;-)
如果您想要保持高宽比,但仍然希望将您的OLEObject安装到30x30网格中,则需要将一个设置应用于较大的维度。
' ....
If OleObj.Width > OleObj.Height Then
OleObj.Width = 30
Else
OleObj.Height = 30
End If
' ....
然后-水平中心的对象,您将添加(30 - OLEObj.Width)/2
到oCell.Left
等.
https://stackoverflow.com/questions/28750196
复制相似问题