热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

OLEObject高度和宽度不一致

如何解决《OLEObject高度和宽度不一致》经验,为你挑选了1个好方法。

我目前正在将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)/2oCell.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)/2oCell.Left等等...


推荐阅读
author-avatar
fyy1784502
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有