Word.Tips.Net Welcome toWord.Tips.Net

Helpful Links

Tips.Net Home
WordTips Home

Ask a Word Question
Make a Comment

Tips.Net Store

WordTips FAQ
WordTips Premium

Learn Access Now
Free Printable Forms

Beauty Tips
Car Tips
Cleaning Tips
College Tips
Cooking Tips
Excel2007 Tips
ExcelTips
Family Tips
Gardening Tips
Health Tips
Home Tips
Legal Tips
Money Tips
Organizing Tips
Pest Tips
Pet Tips
Wedding Tips
Word2007 Tips
WordTips

Advertise on the
WordTips Site

Newest Tips

Setting Fraction Bar Overhang Spacing in the Equation Editor

Printing On Both Sides of the Paper

Turning Off AutoComplete for Dates

Ordering Search and Replace

Understanding Auto Line Spacing

Adding Comments to Your Document

Conditional Calculations in Word

 

Determining Picture Size in VBA

Summary: A VBA macro that will determine the size of all the graphic objects within your document. (This tip works with Microsoft Word 97, Word 2000, Word 2002, and Word 2003.)

Word keeps quite a bit of information together about the images that you insert in your documents. This information is necessary so that Word knows how to size, position, and display images. If you want to find out more information about the images in your document, then you need to know something about how Word stores the information.

Images are stored as either of two types of graphic objects: regular shapes or inline shapes. Regular shapes are those that reside on the drawing layer, as opposed to inline shapes, which reside in the text layer. Both types of objects are stored with different object collections. Regular shapes are in the Shapes collection, and inline shapes are stored in the InlineShapes collection. To access information about the objects, you just need to use a little VBA.

The following VBA macro will work in Word 2000 (or later versions) to create a document that displays the size of all the graphics objects within a document, in both points and pixels:

Sub FigureInfo()
    Dim iShapeCount As Integer
    Dim iILShapeCount As Integer
    Dim DocThis As Document
    Dim J As Integer
    Dim sTemp As String
    
    Set DocThis = ActiveDocument
    Documents.Add
    
    iShapeCount = DocThis.Shapes.Count
    If iShapeCount > 0 Then
        Selection.TypeText Text:="Regular Shapes"
        Selection.TypeParagraph
    End If
    For J = 1 To iShapeCount
        Selection.TypeText Text:=DocThis.Shapes(J).Name
        Selection.TypeParagraph
        sTemp = "     Height (points): "
        sTemp = sTemp & DocThis.Shapes(J).Height
        Selection.TypeText Text:=sTemp
        Selection.TypeParagraph
        sTemp = "     Width (points): "
        sTemp = sTemp & DocThis.Shapes(J).Width
        Selection.TypeText Text:=sTemp
        Selection.TypeParagraph
        sTemp = "     Height (pixels): "
        sTemp = sTemp & PointsToPixels(DocThis.Shapes(J).Height, True)
        Selection.TypeText Text:=sTemp
        Selection.TypeParagraph
        sTemp = "     Width (pixels): "
        sTemp = sTemp & PointsToPixels(DocThis.Shapes(J).Width, False)
        Selection.TypeText Text:=sTemp
        Selection.TypeParagraph
        Selection.TypeParagraph
    Next J
    
    iILShapeCount = DocThis.InlineShapes.Count
    If iILShapeCount > 0 Then
        Selection.TypeText Text:="Inline Shapes"
        Selection.TypeParagraph
    End If
    For J = 1 To iILShapeCount
        Selection.TypeText Text:="Shape " & J
        Selection.TypeParagraph
        sTemp = "     Height (points): "
        sTemp = sTemp & DocThis.InlineShapes(J).Height
        Selection.TypeText Text:=sTemp
        Selection.TypeParagraph
        sTemp = "     Width (points): "
        sTemp = sTemp & DocThis.InlineShapes(J).Width
        Selection.TypeText Text:=sTemp
        Selection.TypeParagraph
        sTemp = "     Height (pixels): "
        sTemp = sTemp & PointsToPixels(DocThis.InlineShapes(J).Height, True)
        Selection.TypeText Text:=sTemp
        Selection.TypeParagraph
        sTemp = "     Width (pixels): "
        sTemp = sTemp & PointsToPixels(DocThis.InlineShapes(J).Width, False)
        Selection.TypeText Text:=sTemp
        Selection.TypeParagraph
        Selection.TypeParagraph
    Next J
End Sub

This macro doesn't work in Word 97 because Word 97 does not recognize the PointsToPixels statement. If you remove the lines that use this statement (or create your own PointsToPixels function), then the macro will work just fine under Word 97.

Note that the macro returns the names of regular shapes, but not the names of inline shapes. The reason for this is that Word doesn't maintain the names of inline shapes. When you insert a regular shape in your document (well, on the drawing layer), then Word assigns a name to the shape, such as Rectangle 2 or Oval 3.

Tip #1497 applies to Microsoft Word versions: 97 | 2000 | 2002 | 2003

Add a Professional Finishing Touch! Word includes great tools that allow you to add professional-grade finishing touches to your documents. You can add indexes, tables of contents, and other special tables by using the detailed information available in this volume.
 
Check out WordTips: Indexes and Special Tables today!