Bob需要计算文档中的所有图形。有些图形是嵌入式的,有些是浮动的。一些被插入为图片,一些被使用Word中的绘图工具创建。鲍勃(Bob)怀疑文档中有150到200张图形,但是他很想一种快速计数的方法。

您可以尝试以下两种方法来获取图形数量。第一件事是使用简单的搜索和替换。您所需要做的就是搜索^ g并替换为^&。那会找到任何图形,并用找到的任何图形替换它。换句话说,您的文档没有任何更改。但是,Word会在完成后通知您进行了多少次“替换”。此计数是文档中的图形数量。

这种方法的问题在于,它仅计算文档中的嵌入式图像。它不会“查找并替换”工程图图层上的任何内容。要获取所有图像,您需要尝试其他方法。例如,您可以使用Word的“转到”功能。按F5键显示“查找和替换”对话框的“转到”选项卡。如果选择屏幕右侧的“图形”,则可以通过单击“下一步”按钮来逐步浏览文档中的图形。如果您有一堆图形,只需在框中输入+150之类的内容,然后单击“转到”即可。您将跳至该图形编号(如果有),然后可以逐步浏览其余图形,并随身携带。

这种方法比查找和替换方法更擅长查找图形。但是,这并不完美,因为文档中有可以放置图形的地方,这些地方不会被“转到”捕获。

(或者说实话,是使用与转到相同的查找机制的对象浏览器进行的。)这种方法可以查找内联图形并位于绘图层上的图形。但是,它找不到其他位置,例如页眉或页脚。要找到它们并将其包括在计数中,您将需要使用宏。以下是一个宏,它将提供更具包容性的图形计数:

Sub CountGraphics()

Const sBkMk = "ReturnHere"



Dim lngSections As Long     Dim lngSectionCounter As Long     Dim lngMainDocInlineShapes As Long     Dim lngMainDocShapes As Long     Dim lngHdrInlineShapes As Long     Dim lngHdrShapeRange As Long     Dim lngFtrInlineShapes As Long     Dim lngFtrShapeRange As Long     Dim lngTotalInlineShapes As Long     Dim lngTotalShapes As Long     Dim sMsgText As String

Application.ScreenUpdating = False

'Get the number of sections in the document.

lngSections = ActiveDocument.Sections.Count

'Get the number of inline objects and     'shape objects in the main document     lngMainDocInlineShapes = ActiveDocument.InlineShapes.Count     lngMainDocShapes = ActiveDocument.Shapes.Count

'Insert a bookmark to return to this place in the document.

ActiveDocument.Bookmarks.Add sBkMk, Selection.Range

'Go to the first page of the document.

Selection.HomeKey wdStory, wdMove

'Cycle through all of the sections in the document     'looking in headers and footers for graphics     For lngSectionCounter = 1 To lngSections         'Go to the header of the current page         ActiveDocument.ActiveWindow.View.SeekView = wdSeekCurrentPageHeader         Selection.WholeStory         'Get the number of inline objects and shape objects         lngHdrInlineShapes = lngHdrInlineShapes _           + Selection.Range.InlineShapes.Count         lngHdrShapeRange = lngHdrShapeRange _           + Selection.Range.ShapeRange.Count

'Go to the footer of the current page         ActiveDocument.ActiveWindow.View.SeekView = wdSeekCurrentPageFooter         Selection.WholeStory         'Get the number of inline objects and shape objects         lngFtrInlineShapes = lngFtrInlineShapes _           + Selection.Range.InlineShapes.Count         lngFtrShapeRange = lngFtrShapeRange _           + Selection.Range.ShapeRange.Count

Selection.GoTo wdGoToSection, wdGoToNext     Next

'Go to the main body of the document.

ActiveDocument.ActiveWindow.View.SeekView = wdSeekMainDocument

'Enable automatic screen updates     Application.ScreenUpdating = True     Application.ScreenRefresh

'Go to the bookmark that was inserted earlier.

If ActiveDocument.Bookmarks.Exists(sBkMk) Then         Selection.GoTo wdGoToBookmark, , , sBkMk         ActiveDocument.Bookmarks(sBkMk).Delete     Else         MsgBox "The bookmark '" & sBkMk & "' does not exist."

End If

'Calculate the total number of inlineshape objects     'and (shape and shaperange) objects     lngTotalInlineShapes = lngMainDocInlineShapes _       + lngHdrInlineShapes + lngFtrInlineShapes     lngTotalShapes = lngMainDocShapes _       + lngHdrShapeRange + lngFtrShapeRange

'Include the values from the variables into the     'text of the message     sMsgText = vbTab & vbTab & "Inline Shapes" _       & vbTab & "Other Shapes" & vbCr _       & "Main Document:" & vbTab & lngMainDocInlineShapes _       & vbTab & vbTab & lngMainDocShapes & vbCr _       & "Headers:" & vbTab & vbTab & lngHdrInlineShapes _       & vbTab & vbTab & lngHdrShapeRange & vbCr _       & "Footers:" & vbTab & vbTab & lngFtrInlineShapes _       & vbTab & vbTab & lngFtrShapeRange & vbCr _       & "Total:" & vbTab & vbTab & lngTotalInlineShapes _       & vbTab & vbTab & lngTotalShapes & vbCr & vbCr _       & "Note: The values for the headers and the footers " _       & "could include duplicates."



'Display the results of the procedure.

MsgBox sMsgText End Sub

请注意,该宏不仅获取主文档中的图形数量,还逐步遍历文档中的每个部分,并检查任何图形的页眉和页脚。此宏有几件事情要记住,可能会影响返回计数的准确性。所有这些项目都是Word如何处理文档中图形的一部分。

  • 如果文档包含绘图画布,则无论文档包含单个形状的数量如何,都将其视为单个图形(形状对象)。

  • 分开的形状分开计算。将单独的形状组合在一起时,它们将被视为一个形状。

最后,还有另一种方法可以尝试获取图形数量-只需将文档另存为网页(HTML格式)即可。作为这种保存过程的一部分,Word会将文档中的图形文件保存到其自己的文件夹中。然后,您要做的就是查看文件夹中的文件数,您将对文档中有多少个图形有个很好的了解。 (其他_WordTips_中介绍了如何以HTML格式保存文档。)

注意:

如果您想知道如何使用此页面(或_WordTips_网站上的任何其他页面)中描述的宏,我准备了一个包含有用信息的特殊页面。

_WordTips_是您进行经济有效的Microsoft Word培训的来源。

(Microsoft Word是世界上最流行的文字处理软件。)本技巧(10387)适用于Microsoft Word 97、2000、2002和2003。您可以为Word(Word 2007)的功能区界面找到此技巧的版本。和更高版本)在这里: