我有一个简单的要求,即将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
答案 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文档的子文件夹中获取图像,要么从代码中提取文档存档,然后从提取的集合中获取文件。
这个怎么样:
如果你在Word中,则通过文档的内联形状进行迭代。
对于每个内联形状:
一个。将图像数据复制到剪贴板。你已经有了其他的元数据 你通过VBA中的对象模型获得它的图像。
湾您可以复制图像,例如第一个内联形状:
ActiveDocument.InlineShapes(1).Range.CopyAsPicture
℃。现在图像数据在剪贴板中,应该可以得到 剪贴板上的数据。我知道VBA很糟糕,但你应该这样 能够使用Windows API来解决这个问题。如果你能以某种方式获取图像数据,你可以将其写入文件 您从对象模型中获取的元数据。
答案 4 :(得分:-1)
如果将Microsoft Powerpoint添加到Word VBA引用并在word中定义Powerpoint应用程序对象,则还可以在word内编写PowerPoint宏。
因此您可以利用PP导出功能:
只需选择单词中的形状,将其复制到剪贴板(selection.copy),然后将其粘贴到PP中的空白演示文稿中即可。