Formatting Text and Shapes Programmatically in Word 2010
Summary: Learn how to use Visual Basic for Applications (VBA) to programmatically manipulate and format shapes and special text, such as WordArt, pictures, and SmartArt text, in Word 2010.
Applies to: Office 2010 | Open XML | Visual Studio Tools for Microsoft Office | Word 2007 | Word 2010
In this article
Introduction
Applying picture styles programmatically
Applying text effects to a title or heading programmatically
Applying WordArt text effects to text in a SmartArt graphic programmatically
Conclusion
Additional Resources
Published: April 2012
Provided by: Saul Candib, Microsoft Corporation
Contents
Introduction
Applying picture styles programmatically
Applying text effects to a title or heading programmatically
Applying WordArt text effects to text in a SmartArt graphic programmatically
Conclusion
Additional Resources
Introduction
In Word 2010, new objects and members enable you to manipulate and format shapes and text programmatically, but in many cases, you cannot use the macro recorder to learn how to do it. In particular, neither can you select pictures or SmartArt while you are recording a macro, nor will the recorder pick up formatting changes to WordArt text. This article shows you how to avoid this situation, manipulate shapes, and apply effects programmatically.
The following table lists some of the new members that you can use to manipulate and format text shapes and pictures.
Member |
Description |
---|---|
Returns a Single that represents the brightness of a specified shape color. Read/write. |
|
Returns or sets the angle of the gradient fill for the specified fill format. Read/write. |
|
Returns the GradientStops collection associated with the specified fill format. Read-only. |
|
Returns a PictureEffects object that can be used to apply picture effects to the specified fill formatting. Read-only. |
|
Returns or sets whether the fill rotates with the specified shape. Read/write. |
|
Returns or sets the alignment (the origin of the coordinate grid) for the tiling of the texture fill. Read/write. |
|
Returns or sets a Single that specifies the horizontal scaling factor for the texture fill. Read/write. |
|
Returns or sets a Long that specifies the horizontal offset of the texture from the origin in points. Read/write. |
|
Returns or sets a Long that specifies the vertical offset of the texture from the origin in points. Read/write. |
|
Returns or sets whether the texture fill is tiled or centered. Read/write. |
|
Returns or sets a Single that specifies the vertical scaling factor for the texture fill. Read/write. |
|
Returns a FillFormat object that contains fill formatting properties for the font that was used by the specified range of text. Read-only. |
|
Returns a GlowFormat object that represents the glow formatting for the font that was used by the specified range of text. Read-only. |
|
Returns a LineFormat object that specifies the formatting for a line. Read/write. |
|
Returns a ReflectionFormat object that represents the reflection formatting for a shape. Read-only. |
|
Returns a ColorFormat object that represents the color for the specified font. Read-only. |
|
Returns a ShadowFormat object that specifies the shadow formatting for the specified font. |
|
Returns a ThreeDFormat object that contains 3-D effect formatting properties for the specified font. Read-only. |
|
Returns or sets a Single that specifies the degree of transparency for the glow effect as a value between 0.0 (opaque) and 1.0 (clear). Read/write. |
|
Returns True if there is a SmartArt diagram present on the shape. Read-only. |
|
Returns a SmartArt object that provides a way to work with the SmartArt associated with the specified inline shape. Read-only. |
|
Inserts a SmartArt graphic as an inline shape into the active document. |
|
Returns or sets a Crop object that represents an image cropping. Read/write. |
|
Returns or sets a Single that specifies the degree of blur effect applied to the specified object. Read/write. |
|
Returns or sets the separation, in points, of the reflected image from the shape. Read/write. |
|
Returns or sets a Single that specifies the degree of transparency for the reflection effect as a value between 0.0 (opaque) and 1.0 (clear). Read/write. |
|
Returns True if there is a SmartArt diagram present on the shape. Read-only. |
|
Returns a SmartArt object that lets you work with the SmartArt associated with the specified shape. Read-only. |
|
Inserts the specified SmartArt graphic into the active document. |
|
Returns or sets a Single that represents the length of the radius for a soft edge effect. Read/write. |
|
Returns a ThreeDFormat object that represents the three-dimensional formatting of the parent shape. Read-only. |
|
Returns or sets the warp format (how the text is warped) for the specified text frame. Read/write. |
|
Returns or sets the WordArt type for the specified text frame. Read/write. |
Applying picture styles programmatically
Various UI controls on the Picture Format ribbon tab in Word 2010 let you apply styles and formats to pictures in your documents. For example, the Picture Styles gallery offers various designs you can use to frame your pictures. These designs incorporate several formatting aspects, such as border, line, rotation, glow, shadow, and 3-D. For more control, you can open the Format Picture dialog box, as shown in Figure 1.
Figure 1. The 3-D Format tab of the Format Picture dialog box
The various tabs in this dialog box give you control over almost every facet of the picture.
You can also achieve all or most of the same formatting programmatically. One thing that you can't do, however, is use the Macro Recorder to determine just how to format pictures programmatically, because the recorder will not let you select a picture.
Consider the portrait of a young man shown in Figure 2.
Figure 2. A portrait of a young man before the application of picture styles
The following code sample inserts the picture in the document at the selected location and applies some of the previously mentioned formatting to it. In particular, it applies a frame to the picture, applies reflection, sets an artistic picture effect, applies a 3-D extrusion to the frame, and then rotates the picture and adds perspective.
Public Sub AddPictureStyles()
Dim WdSelection As Selection
Dim WdInlineShape As InlineShape
Dim WdShape As Shape
Set WdSelection = Application.ActiveWindow.Selection
Set WdInlineShape = WdSelection.InlineShapes.AddPicture("C:\Users\username\Pictures\portrait.jpg")
Set WdShape = WdInlineShape.ConvertToShape
' Set the color type
WdShape.PictureFormat.ColorType = msoPictureAutomatic
' Set the reflection type
WdShape.Reflection.Type = msoReflectionType2
' Set the frame shape to oval
WdShape.AutoShapeType = msoShapeOval
WdShape.Line.Style = msoLineThickBetweenThin
WdShape.Line.Weight = 10
' Set the artistic picture effect
WdShape.Fill.PictureEffects.Insert (msoEffectPlasticWrap)
' Set the size and color of the frame extrusion
WdShape.ThreeD.SetThreeDFormat (msoThreeD2)
WdShape.ThreeD.ExtrusionColor = RGB(Red:=255, Green:=28, Blue:=0)
' Set the shape rotation and perspective
WdShape.ThreeD.RotationX = 35
WdShape.ThreeD.RotationY = 8
WdShape.ThreeD.RotationZ = 357
WdShape.ThreeD.Perspective = msoTrue
End Sub
The sample code uses several formatting-related objects to set picture properties and effects, including frame shape, frame extrusion, artistic picture effect, and shape rotation and perspective. Among these objects are the FillFormat, LineFormat, PictureFormat, ReflectionFormat, SoftEdgeFormat, and ThreeDFormat objects.
After you run the code, the picture resembles the image in Figure 3.
Figure 3. The same portrait after application of picture formatting
Applying text effects to a title or heading programmatically
In Word 2010, you can apply some very interesting text effects to titles or headings programmatically. For example, you can apply text effects such as reflection, shadow, and glow. For reflection, you can set four parameters: transparency; size; distance from text; and amount of blur. In addition, Word provides nine preset reflection types, which are combinations of the previous four parameters.
The following code sample shows how to apply some of these text effects to a heading. Before running the code, select the heading text you want to format.
Public Sub SetTextEffects()
Dim WdSelection As Selection
Set WdSelection = Application.ActiveWindow.Selection
With WdSelection.Font
.Size = 36
.ColorIndex = wdDarkRed
.Bold = True
.Reflection.Type = msoReflectionType5
.Glow.Radius = 5
.TextShadow.Type = msoShadow5
End With
End Sub
If your heading reads "This is a heading," after running this sample code, the heading resembles the one shown in Figure 4.
Figure 4. Heading text after application of text effects
Applying WordArt text effects to text in a SmartArt graphic programmatically
Word 2010 introduces several new ways to apply effects to SmartArt graphic text programmatically. These text-formatting effects are basically the same ones available for heading text, as described in the previous section.
The following sample code adds a SmartArt graphic to the document, formats it as WordArt, and applies text effects, including a warp format, to the SmartArt graphic.
Public Sub AddSmartArt()
Dim WdShape As Shape
Dim WdShapes As Shapes
Dim WdSmartArtLayouts As SmartArtLayouts
Dim WdSmartArtLayout As SmartArtLayout
Set WdShapes = ActiveDocument.Shapes
Set WdSmartArtLayouts = Application.SmartArtLayouts
Set WdSmartArtLayout = WdSmartArtLayouts(81)
Set WdShape = WdShapes.AddSmartArt(WdSmartArtLayout)
WdShape.SmartArt.Nodes(1).TextFrame2.TextRange.Text = "This Way"
WdShape.SmartArt.Nodes(2).TextFrame2.TextRange.Text = "That Way"
WdShape.SmartArt.Nodes(1).TextFrame2.WordArtformat = msoTextEffect12
WdShape.SmartArt.Nodes(1).TextFrame2.ThreeD.SetThreeDFormat msoThreeD10
WdShape.SmartArt.Nodes(2).TextFrame2.TextRange.Font.Glow.Radius = 25
WdShape.SmartArt.Nodes(2).TextFrame2.WarpFormat = msoWarpFormat13
End Sub
The resulting shape resembles the one shown in Figure 5.
Figure 5. A SmartArt graphic, with text formatted as WordArt
SmartArt consists of a set of shapes in a graphic layout. Word provides about 150 of these layouts, all of which include text placeholders. You can see a preview of these layouts in the Choose a SmartArt Graphic dialog box, which you open by clicking SmartArt on the Insert tab in the Word UI.
You might have observed that I identified the SmartArt layout that I wanted to use (Diverging Arrows) by its index number (81) in the SmartArtLayouts collection:
Set WdSmartArtLayout = WdSmartArtLayouts(81)
That is because there is no enumeration of these layouts in the object model. To find out which index number corresponds to which layout, you can use the following short code sample. To determine the layout that you want to apply, examine the layouts in the Choose a Smart Art Graphic dialog box in the Word UI. (On the Insert tab, in the Illustrations group, click SmartArt.) Then pass that index number to the SmartArtLayouts.Item method to determine the layout that you want. Be aware that because the Item method is the default method of the SmartArtLayouts collection, you do not need to write out the full syntax (SmartArtLayouts.Item()).
The following code example prints the names of the SmartArt layouts. The list of results is also shown in this blog post.
Public Sub GetSmartArtLayoutNames()
Dim WdSmartArtLayouts As SmartArtLayouts
Set WdSmartArtLayouts = Application.SmartArtLayouts
For i = 1 To WdSmartArtLayouts.Count
Debug.Print i; WdSmartArtLayouts(i).Name
Next i
End Sub
Be aware that the constants in the MsoPresetTextEffect enumeration correspond to the WordArt formats in the WordArt gallery on the Format tab of SmartArt Tools on the ribbon, as shown in Figure 6. The constants, which are numbered one through thirty, correspond to the formats in that gallery, starting on the top row, going left to right, and then moving to the next row, and so on.
Figure 6. The WordArt Gallery
Conclusion
This article shows how to use new objects and members in the Word 2010 VBA object model to format text, pictures, and SmartArt shapes programmatically.
Additional Resources
For more information, see the following resources: