views:

224

answers:

1

We're trying to create a PowerPoint slide programmaticaly. We can obtain bullets on a single level, but playing with tabs and line returns doesn't work for nested enumerations.

For now we get:

  • text 1
  •     subtext1
  •     subtext2
  • text 2

And what we want is :

  • text 1
    • subtext1
    • subtext2
  • text 2

Is there a way to control these using C# or VBA?

+2  A: 

First, get a reference to the Paragraphs of the TextRange2, as each bulleted item is a paragraph (really a TextRange2).

Dim pres As Presentation
Set pres = Application.ActivePresentation

Dim slide As slide
Set slide = pres.Slides(2)

Dim shapes As shapes
Set shapes = slide.shapes

Dim textShape As Shape
Set textShape = shapes(2)

Dim textFrame As TextFrame2
Set textFrame = textShape.TextFrame2

Dim textRng As TextRange2
Set textRng = textFrame.textRange

Dim p As TextRange2
Set p = textRng.Paragraphs

SetIndent 1, p.Item(1)
SetIndent 2, p.Item(2)
SetIndent 2, p.Item(3)
SetIndent 1, p.Item(4)

The last four lines call a function that encapsulates the logic of setting the indent "level," which affects the style of bullets and text, and the actual indent of the bullets and text:

Private Function SetIndent(ByVal level As Integer, ByRef p As TextRange2)

p.ParagraphFormat.IndentLevel = level
p.ParagraphFormat.FirstLineIndent = 40
p.ParagraphFormat.LeftIndent = level * 40

End Function

You could certainly refactor this to meet your needs -- like passing the indent factor (I hardcoded it as 40, but your mileage may vary).

Jay
Thanks, it works
Raoul Supercopter