如何将嵌入的图片从Excel保存/复制到Word

时间:2015-11-30 19:42:05

标签: excel vba excel-vba ms-word word-vba

我有什么: 一个Excel文件在一个列中(实际上它是自由格式化但在一列中对齐)一些元素嵌入了bmp图片,当你点击它们时显示公式=EMBED("Paint.Picture","")。当您查看Excel工作表时,仅显示代表图片的图标,而不是图片本身

我想要什么: 嵌入的图片(不是图标)复制到新的Word文档。

到目前为止我的代码

'Image Objects
Dim myObjs As Shapes
Dim myObj As Shape
Set myObjs = ActiveSheet.Shapes

'Traversing objects
Dim row As Integer
Dim myRange As Range
Dim myRange2 As Range
Dim isAddressMatch As Boolean

'Word Document Objects
Dim wordApp As New Word.Application
Dim myWord As Word.Document


'Prepare word for output
Set myWord = wordApp.Documents.Add
wordApp.Visible = True

'Initalize traversing objectts
Set myRange = Sheets("myWorksheet").Range("Q5")
Set myRange2 = Sheets("myWorksheet").Range("E5")
row = 0

'Loop through range values in the desired column
While (myRange2.Offset(row).Value <> "")
    'Loop through all shape objects until address match is found.
    For Each myObj In myObjs

        On Error Resume Next
        isAddressMatch = (myObj.TopLeftCell.Address = myRange.Offset(row).Address)
        If Err.Number <> 0 Then
            isAddressMatch = False
            On Error GoTo 0
        End If

        'When match is found copy the bmp picture from Excel to Word
        If (isAddressMatch) Then
            myObj.Select
            ''''''''This copies the excel default picture,'''''''''''''''
            ''''''''not the picture that is embeded.'''''''''''''''''''''
            myObj.CopyPicture 'What is the correct way to copy myObj

            myWord.Range.Paste
            'Rest of the code not yet implement

        End If
    Next
    row = row + 1
Wend

运行代码时会发生什么: 我的代码遍历列中边界内的所有“形状”并复制对象图片。但是,当我将其粘贴到word中时,它实际上是链接图像(图标)的副本,而不是底层的嵌入图像。

到目前为止我发现了This code向我展示了如何创建嵌入对象,而不是如何复制嵌入对象。

2 个答案:

答案 0 :(得分:1)

更新:更简单的解决方案

正如jspek在评论中指出的那样,实际上可以使用Copy的{​​{1}}方法复制图像,例如:

OLEObject

旧解决方案

我发现了一个涉及剪贴板和SendKeys的次优解决方案 - 受this link的启发。通过探索提取Dim obj As OLEObject Set obj = ActiveSheet.OLEObjects(myObj.Name) 'Copy the OLE object representing a picture. obj.Copy 'Paste the picture in Word. myWord.Range.Paste 属性的方法,我确信您可以更优雅地做到这一点。在撰写本文时,提取这些内容超出了我的专业范围: - )

围绕OLEObject展开。此代码执行图片的OLE object's host application(在本例中为Paint),发送密钥以复制图片,最后将其粘贴到Word中。

OLEObject

答案 1 :(得分:0)

我不是编码员,但我发现如果您为单元格范围“定义名称”,您可以使用定义的名称执行各种操作。例如:

将Excel工作簿行链接到Word文档 1.打开Excel工作簿转到公式 - &gt;定义NAME 2.为要链接的每个单元格或单元格组创建“NAME”。 例如,我将Word文档中的问题#超链接到我的Excel文档,该文档用于将问题导入我们的学习管理系统。示例NAME = Question_22并且指的是单元格范围= WBT16DS058!$ A $ 90(=工作表!cellrange) 3.保存&amp;关闭Excel工作簿。 4.打开Word文档并创建文本(问题022),突出显示并插入超链接。 5.浏览&amp;选择您的Excel文档,附加地址的末尾以包含#NAME。 (即 - R312Test.xlsx#Question_22)。 6.选择新链接,Excel文档将打开到单元格区域。

因为您要为单元格范围定义NAME,所以即使单元格移动,链接也将保持活动状态。

我想知道您是否使用“定义名称”作为您的单元格区域,其中包含您要嵌入的图片,您将获得好运。

如果您已经定义了单元格区域的名称并尝试了这个,我很抱歉。