现在的位置: 首页 > 精选转贴 > 正文

在不同版本 Excel 中插入图片

2014年06月30日 精选转贴 ⁄ 共 2142字 ⁄ 字号 暂无评论 ⁄ 阅读 1,453 次
 本文非原创,转自网络

 

我们在 Excel 中插入图片一般使用 Picture 集合的 Insert 方法。 但是随着 Excel 版本的演进,在不同的版本指间插入图片还是有一些差别。

下面是 Excel2003 中的代码。其中 Insert 方法中的文件路径的文件夹分界符可以是”\”也可以是”/”。另外,设置LoctAspecRatio 属性为 True 并不能固定长宽比,需要同时调整长度和宽度。

Sub InsertImg2003()
    Dim imgWidth As Integer
    Dim fixWidth As Integer
    Dim dRatio As Double
    '设置图片显示固定宽度
    fixWidth = Cells(2, 2).Width * 5
    '选择图片插入位置
    Cells(2, 2).Select
    With ActiveSheet.Pictures.Insert("C:\Test.jpg")
        '获取图片插入后的原始宽度
        imgWidth = .ShapeRange.Width
        '获取拉伸比,如果固定显示高度的话用Height属性
        dRatio = fixWidth / imgWidth
        'Excel2003中设置固定长宽比不起作用 '
        .ShapeRange.LockAspectRatio = msoTrue
        '调整宽度
        .ShapeRange.ScaleWidth dRatio, msoFalse, msoScaleFromTopLeft
        '调整高度
        .ShapeRange.ScaleHeight dRatio, msoFalse, msoScaleFromTopLeft
    End With
End Sub

 

Excel2007 中插入图片的代码基本上一样。但是 Insert 方法中的文件路径的文件夹分界符只能是”\”。另外设置固定长宽比在 Excel2007 中有效,所以只需要设置宽度即可。还有一个不同的地方是 2007 中使用代码插入图片后,图片并不定位于当前选择的单元格,需要设置图片的位置。

Sub InsertImg2007()
    Dim imgWidth As Integer
    Dim fixWidth As Integer
    Dim dRatio As Double
    '设置图片显示固定宽度
    fixWidth = Cells(2, 2).Width * 5
    '选择图片插入位置
    Cells(2, 2).Select
    With ActiveSheet.Pictures.Insert("C:\Test.jpg")
        '获取图片插入后的原始宽度
        imgWidth = .ShapeRange.Width
        '获取拉伸比,如果固定显示高度的话用Height属性
        dRatio = fixWidth / imgWidth
        '设置固定长宽比,默认为True
        .ShapeRange.LockAspectRatio = msoTrue
        '调整宽度
        .ShapeRange.ScaleWidth dRatio, msoFalse, msoScaleFromTopLeft
        '不需要重复设置高度 '
        .ShapeRange.ScaleHeight dRatio, msoFalse, msoScaleFromTopLeft
        'Excel2007和2003不同,使用代码插入图片的位置并不位于选择的单元格
        .Left = Cells(2, 2).Left
        .Top = Cells(2, 2).Top
    End With
End Sub

 

2007 的代码可以用于 2010,但是当保存文件时,你会发现文件的大小并没有什么改变,实际上在Excel2010 里使用代码插入图片只是保存了指向图片的链接,图片本身并没有保存下来。当源图片文件被删除或移走,Excel 文件将不能显示图片。一个简单的方法是将图片剪切一下,然后重新粘贴,这样Excel文件中将在保存时包含图片。同时,Cut 方法的位置放在 ScaleWidth 前或者后将影响图片的保存质量。

Sub InsertImg2010()
    Dim imgWidth As Integer
    Dim fixWidth As Integer
    Dim dRatio As Double
    '设置图片显示固定宽度
    fixWidth = Cells(2, 2).Width * 5
    '选择图片插入位置
    Cells(2, 2).Select
    With ActiveSheet.Pictures.Insert("C:\Test.jpg")
        '获取图片插入后的原始宽度
        imgWidth = .ShapeRange.Width
        '获取拉伸比,如果固定显示高度的话用Height属性
        dRatio = fixWidth / imgWidth
        '设置固定长宽比,默认为True
        .ShapeRange.LockAspectRatio = msoTrue
        '调整宽度
        .ShapeRange.ScaleWidth dRatio, msoFalse, msoScaleFromTopLeft
        '不需要重复设置高度 '
        .ShapeRange.ScaleHeight dRatio, msoFalse, msoScaleFromTopLeft
        'Excel2010和2007不同,插入的图片位于当前选择的单元格,不需要设置位置 '
        .Left = Cells(2, 2).Left '.Top = Cells(2, 2).Top
        '剪切粘贴图片让文件保存的时候包含图片
        .Cut 
        ActiveSheet.Pictures.Paste
    End With
End Sub

给我留言

您必须 [ 登录 ] 才能发表留言!