VBA编程⼀例:解决WORD⽂档⽆法显⽰链接的图像问题
OFFICE的VBA编程功能其实是蛮强⼤的,⽽VB的语法简单,学起来也很容易上⼿,如果做过OLE编程的对OFFICE的对象结构有了解就更容易了。利⽤VBA我们可以做很多批量处理的事,昨天刚好⽤它解决了个问题,这⾥把过程记录下供参考,应该对VBA新⼿会有帮助,熟⼿就不⽤看了。
昨天遇到的情况是,⽤Office2007从本地打开带图⽚的html并另存为word doc⽂档时,WORD把图像保存为链接⽽且不保留快照,这样在其它机器上打开时就会看不到图⽚,只看到⼀个“⽆法显⽰链接的图像,该⽂件可能已被移动、重命令或删除”的提⽰:
交通肇事罪构成要件在WORD中尝试了很多办法,另存为MHT、另存为HTML再复制粘贴回来、存为旧版DOC、另存为RTF,都不能把图⽚⼀起保存,也不到相应的选项。在⽹上查了半天,不到好的解决办法。重新插⼊图⽚可以解决,但由于⽂档较多,每个⽂档的图⽚有好⼏⼗个,且分布在不同的⽬录下,⼀个个去修改会⾮常⿇烦。
县城的办法不着,接下来就只好从农村出发,⾃⼰动⼿解决了。⾸先,利⽤WORD的宏录制功能,搞清楚插⼊图像和链接图像的区别。我录制了⼀个宏,在录制过程中分别以插⼊、链接、插⼊并链接的⽅式插⼊三个不同图:
停⽌录制之后,编辑之,可看到以下脚本:
很显然,在插图⽚Selection.InlineShapes.AddPicture时,“SaveWithDocument:=False”这个参数是导致图⽚不保存的罪魁祸⾸。
再进⼀步查帮助,发现InlineShape和Shape都有⼀个LinkFormat对象,⽽LinkFormat对象中就有SavePictureWithDocument属性,因此我们我只要把⽂档中的图像遍历⼀下,把这个属性都设置掉就能解决问题了。原理很简单,接下来我们就来实现它。
打开要处理的DOC⽂件,按ALT+F11进⼊VBA编程界⾯,在左边⼯程树上选中我们的⽂档,右键插⼊⼀个⽤户窗体:
郭令灿在窗体上放⼀个按钮:
然后双击它⽣成点击事件函数,并在事件中编写代码,遍历所有图⽚对象,判断并设置是否保存的属性:万能网卡驱动怎么用
1
诸葛亮王朗需要注意的是,有些图⽚对象可能没有LinkFormat 属性,因此代码中要有判断是否为空的语句。
接下来按F5运⾏,显⽰⽤户窗体:
点击按钮,运⾏结果如下图:
猪和什么属相最配关闭⽤户窗⼝,这时所有图⽚已经会随WORD ⽂档⼀起保存了。
最后还要清理⼀下,回到VBA 编程界⾯,把插⼊的⽤户窗体删除,关闭VAB 编程窗⼝,保存退出。这时把⽂档拷到其它机器上也能看到图⽚了。
补充说明⼀点,如果有很多个⽂档要执⾏相同的操作,可专门新建⼀个叫“链接图像处理.doc”的⽂档来保存⽤户窗体和代码,我们的代码中处理的是ActiveDocument ,因此只要同时打开要处理的⽂件和这个“链接图像处理.doc”⽂档,就能编写⼀次处理所有⽂件了。[vb]
01. Private Sub CommandButton1_Click() 02. Dim c As Integer 03. Dim shp As InlineShape 04. Dim sp As Shape 05. 06. c = 0 07. For i = 1 To ActiveDocument.InlineShapes.Count 08. Set shp = ActiveDocument.InlineShapes.Item(i) 09. If Not shp.LinkFormat Is Nothing Then 10. If Not shp.LinkFormat.SavePictureWithDocument Then 11. c = c + 1 12. shp.LinkFormat.SavePictureWithDocument = True 13. End If 14. End If 15. Next i 16. 17. For i = 1 To ActiveDocument.Shapes.Count 18. Set sp = ActiveDocument.Shapes.Item(i) 19. If Not sp.LinkFormat Is Nothing Then 20. If Not sp.LinkFormat.SavePictureWithDocument Then 21. c = c + 1 22. sp.LinkFormat.SavePictureWithDocument = True 23. End If 24. End I
f 25. Next i 26. 27. MsgBox CStr (c) + "个图⽚已经修改为与⽂档⼀起保存" 28. 29. End Sub魔方复原公式
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论