如何使用VBA将Word Shapes保存为图像?

时间:2011-06-28 19:59:40

标签: vba ms-word shapes

我有一个简单的要求,即将Word文档中嵌入的MS-Office绘图对象保存到图像文件中。以下代码适用于从Powerpoint进行图像提取。但是,如果我将ActivePresentation修改为ActiveDocument,它对MS-Word不起作用。 Export方法不适用于shape对象。有什么想法吗?

Dim oPPTShap as Shape
For k = 1 To .Slides(intSlide).Shapes.Count
    Set oPPTShape = ActivePresentation.Slides(intSlide).Shapes(k)
    oPPTShape.Export "C:\images\s" & k & ".bmp", ppShapeFormatBMP                
Next

5 个答案:

答案 0 :(得分:3)

这不是很好,因为它以EMF格式输出每个图像,但它确实将内联形状集合中的每个图像写入单个文件。它当然可以修改为进行其他形状集合。

我想增强直接编写JPG,但到目前为止还不知道VBA在途中通过过滤器推送WRITE输出。因此,要使用这些文件,您需要运行一些外置后处理/批处理以将文件从EMF转换为更有用的文件。

Sub WriteInlineShapesToFile()
    Dim docCurrent As Document
    Dim shapeCurrent As InlineShape
    Dim RC As Integer
    Dim vData() As Byte
    Dim i As Long
    Dim lWritePos As Long
    Dim strOutFileName As String

    Set docCurrent = ActiveDocument

    i = 1

    For Each shapeCurrent In docCurrent.InlineShapes
        strOutFileName = "c:\temp\datafile" & CStr(i) & ".emf"
        Open strOutFileName For Binary Access Write As #1
        i = i + 1
        vData = shapeCurrent.Range.EnhMetaFileBits
        lWritePos = 1

        Put #1, lWritePos, vData

        Close #1

 Next shapeCurrent

    RC = MsgBox("Job complete.", vbOKOnly, "Job Status")

End Sub

答案 1 :(得分:2)

您尝试从PPT VBA复制到Word VBA的代码将无法正常工作,因为Word中不存在该功能。

您可以自己尝试:当您在Word中选择形状并右键单击时,您没有“另存为图像...”的功能(与PPT相比,您具有此功能)。

然而,从this page开始,作者指出了一个 MVP,他构建了一个VBA解决方案来做你想做的事:http://www.lebans.com/msword.htm

希望它能做你想做的事,

答案 2 :(得分:1)

这是我能想到的一个肮脏的(和最快的)技巧:D

将word文档作为网页保存到临时文件夹。像

这样的东西
ActiveDocument.SaveAs FileName:="C:\Temp\Sample.htm", FileFormat:=wdFormatHTML, _
LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword _
:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
False

word文档中的所有形状和图片将自动保存在名为 C:\ Temp \ Sample_Files

的文件夹中

然后,您只需删除该文件夹中不是图像的所有文件:)

如果您想要选择此选项,请告诉我们:)

西特

修改

Gosh我刚才意识到这是一个老话题。嗯,非常感谢“Joel Coehoorn”编辑这个帖子LOLZ

答案 3 :(得分:0)

好的,这不是解决方案,而是针对旧问题的不同方法。到目前为止,我遇到了许多示例,这些示例要么将文件保存为.HTML,然后从HTML文档的子文件夹中获取图像,要么从代码中提取文档存档,然后从提取的集合中获取文件。

这个怎么样:

  1. 如果你在Word中,则通过文档的内联形状进行迭代。

  2. 对于每个内联形状:

    一个。将图像数据复制到剪贴板。你已经有了其他的元数据  你通过VBA中的对象模型获得它的图像。

    湾您可以复制图像,例如第一个内联形状:

    ActiveDocument.InlineShapes(1).Range.CopyAsPicture
    

    ℃。现在图像数据在剪贴板中,应该可以得到  剪贴板上的数据。我知道VBA很糟糕,但你应该这样  能够使用Windows API来解决这个问题。如果你能以某种方式获取图像数据,你可以将其写入文件  您从对象模型中获取的元数据。

答案 4 :(得分:-1)

如果将Microsoft Powerpoint添加到Word VBA引用并在word中定义Powerpoint应用程序对象,则还可以在word内编写PowerPoint宏。

因此您可以利用PP导出功能:

只需选择单词中的形状,将其复制到剪贴板(selection.copy),然后将其粘贴到PP中的空白演示文稿中即可。