将图像嵌入到 Excel 电子表格 - VBA

Posted

技术标签:

【中文标题】将图像嵌入到 Excel 电子表格 - VBA【英文标题】:Embed Image to Excel Spreadsheet - VBA 【发布时间】:2011-11-15 00:19:37 【问题描述】:

我需要通过 Excel VBA 将图像嵌入到电子表格中,这样每当我重新定位我的 excel 文件时,图像仍会显示。我该怎么做?

【问题讨论】:

【参考方案1】:

此代码将在当前工作表上插入图像并将其定位在单元格 E10:

Set oPic = Application.ActiveSheet.Shapes.AddPicture("d:\temp\mypic.jpg", False, True, 1, 1, 1, 1)
oPic.ScaleHeight 1, True
oPic.ScaleWidth 1, True

oPic.Top = Range("E10").Top
oPic.Left = Range("E10").Left

【讨论】:

【参考方案2】:

您是否尝试过使用宏记录器?

这就是它为我制作的:

Sub Macro1()

  ActiveSheet.Pictures.Insert ("C:\mypicture.jpg")

End Sub

还有大量使用谷歌搜索词的信息:“使用 VBA Excel 插入图片”。以下代码取自ExcelTip感谢原作者 Erlandsen Data Consulting

使用下面的宏,您可以在工作表的任何范围内插入图片,只要图片本身保留在其原始位置,它们就会保留。

图片可以水平和/或垂直居中。

Sub TestInsertPicture()
    InsertPicture "C:\FolderName\PictureFileName.gif", _
        Range("D10"), True, True
End Sub

Sub InsertPicture(PictureFileName As String, TargetCell As Range, _
    CenterH As Boolean, CenterV As Boolean)
    ' inserts a picture at the top left position of TargetCell
    ' the picture can be centered horizontally and/or vertically
    Dim p As Object, t As Double, l As Double, w As Double, h As Double
    If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub
    If Dir(PictureFileName) = "" Then Exit Sub
    ' import picture
    Set p = ActiveSheet.Pictures.Insert(PictureFileName)
    ' determine positions
    With TargetCell
        t = .Top
        l = .Left
        If CenterH Then
            w = .Offset(0, 1).Left - .Left
            l = l + w / 2 - p.Width / 2
            If l < 1 Then l = 1
        End If
        If CenterV Then
            h = .Offset(1, 0).Top - .Top
            t = t + h / 2 - p.Height / 2
            If t < 1 Then t = 1
        End If
    End With
    ' position picture
    With p
        .Top = t
        .Left = l
    End With
    Set p = Nothing
End Sub

使用下面的宏,您可以插入图片并将它们适合工作表中的任何范围。

Sub TestInsertPictureInRange()
    InsertPictureInRange "C:\FolderName\PictureFileName.gif", _
        Range("B5:D10")
End Sub

Sub InsertPictureInRange(PictureFileName As String, TargetCells As Range)
    ' inserts a picture and resizes it to fit the TargetCells range
    Dim p As Object, t As Double, l As Double, w As Double, h As Double
    If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub
    If Dir(PictureFileName) = "" Then Exit Sub
    ' import picture
    Set p = ActiveSheet.Pictures.Insert(PictureFileName)
    ' determine positions
    With TargetCells
        t = .Top
        l = .Left
        w = .Offset(0, .Columns.Count).Left - .Left
        h = .Offset(.Rows.Count, 0).Top - .Top
    End With
    ' position picture
    With p
        .Top = t
        .Left = l
        .Width = w
        .Height = h
    End With
    Set p = Nothing
End Sub

【讨论】:

我们只是使用了相同的解决方案,但是一旦移动或删除了外部图像,它就不起作用了。 那为什么不问我而不是投反对票!我很乐意为您提供更多代码... 哦,我投了反对票,因为 OP 提到无法链接图片,因此可以移动 excel 文件,所以我认为这是对这个特定问题的错误答案。对不起,没有冒犯的意思~我现在才积极参与这个网站大约一个星期。也许下次我只会投票。 OP 要求当他重新定位他的 excel 文件 时,图像仍会显示。如果他说他希望在图像本身被删除后保留图像,那么你是对的,代码将不起作用,因为他可能需要使用形状。问题是 OP 没有制作任何 cmets 或标记解决方案,所以我们真的不知道。也许你可以阅读when to downvote.我已经编辑了我的帖子,所以如果你也选择的话,你可以删除反对票。 如果我移动图像这不起作用,这是问题的特定要求。这个答案不好。

以上是关于将图像嵌入到 Excel 电子表格 - VBA的主要内容,如果未能解决你的问题,请参考以下文章

使用Excel VBA发送带有图表对象的电子邮件 - Office 2013

VBA Excel - 从 MS Access 将列名保存到电子表格

访问 VBA 自动化能够将 Word 文档保存到 Sharepoint 但不能保存到 Excel 电子表格

在EXCEL中用VBA怎样操作WORD文档中嵌入的EXCEL表格?

使用 VBA 将 Excel 中的图表嵌入到 Powerpoint 中的指定占位符中

VBA将Excel电子表格逐行导入Access