Sub FieldsToPictures()
Application.ScreenUpdating = False '关闭屏幕刷新
Dim aField As Field, aStart&, aEnd&, aWidth&, aDoc As Document
Dim aInlineShape As InlineShape, codeBackup$, aPosition&
Set aDoc = Application.Documents(ActiveDocument.Name) '不使用aDoc = ActiveDocument,以增加通用性
For Each aField In aDoc.Fields '在所有域中循环
If aField.Type = wdFieldFormula Then '判断是否为EQ域
codeBackup = aField.Code '备份域代码,以防恢复
aStart = aField.Code.Start - 1: aEnd = aField.Code.End + 1 '获取域代码Range对象的起始坐标
aDoc.Range(aStart, aStart).Select '定位域起点,必须使用Select方法,Information属性的特性,选定内容不在当前屏幕时,将返回-1
aStart = Selection.Information(wdHorizontalPositionRelativeToPage) '获取域起点到页面左边缘的距离,单位磅
Selection.MoveRight Unit:=wdCharacter, Count:=1 '向后移动一位光标,移动到域的终点
aEnd = Selection.Information(wdHorizontalPositionRelativeToPage) '获取域终点到页面左边缘的距离,单位磅
aWidth = aEnd - aStart '获取转化后的图片应有尺寸
aStart = aField.Code.Start - 1: aEnd = aField.Code.End + 1 '再次获取域代码Range对象的起始坐标
aDoc.Range(aStart, aEnd).CopyAsPicture '以图片形式复制域代码区域
aDoc.Range(aStart, aEnd).PasteSpecial Placement:=wdInLine, DataType:=wdPasteMetafilePicture '在域代码区域粘贴图元文件
Set aInlineShape = aDoc.Range(aStart, aStart + 1).InlineShapes(1) '获取图元文件
aInlineShape.PictureFormat.CropRight = aInlineShape.Width - aWidth '裁剪图元文件
aPosition = 5 * (aInlineShape.Height \ 15) + aInlineShape.Height \ 30 '计算图元文件的竖向位置调整值
aInlineShape.Range.Font.Position = 0 - aPosition '调整图元文件竖向位置
aInlineShape.AlternativeText = codeBackup '备份域代码,以防恢复
End If
Next
Application.ScreenUpdating = True '恢复屏幕刷新
End Sub