FWIW, в 2007 и выше, теперь вы можете иметь до 9 уровней линейки вместо 5, как в более ранних версиях.Но ваш код должен работать как есть.Вот упрощенная версия, которая работает с произвольной ячейкой (2,2) таблицы:
Dim oSh As Shape
Dim x As Long
Set oSh = ActiveWindow.Selection.ShapeRange(1)
With oSh.Table.Cell(2, 2).Shape.TextFrame
For x = 1 To 9
.Ruler.Levels(x).LeftMargin = x * 10
.Ruler.Levels(x).FirstMargin = x * 20
Next
End With
Другая вещь, с которой вы можете столкнуться, это то, что вы можете применять определенные типы форматирования (включая настройки линейки) все что тебе нравится;если на уровне, к которому вы применяете текст, нет текста, PPT не будет лаять.Это будет игнорировать тебя.Ваши настройки не будут иметь никакого эффекта.Иногда вам нужно проверить текст, предоставить его, если его там нет (что-то невероятное в реальном мире), а затем удалить все экземпляры вашего невероятного текста.
Уродливо.Да.
Здесь мы добавляем текст и устанавливаем уровни отступа перед попыткой ФОРМАТИРОВАНИЯ каждого уровня отступа:
Sub test()
Dim oSh As Shape
Set oSh = ActiveWindow.Selection.ShapeRange(1)
Dim RulerCount As Long
Dim sTemp As String
sTemp = "@#$%" ' dummy text
With oSh.Table.Cell(2, 3).Shape.TextFrame
For RulerCount = 1 To 5
.TextRange.Paragraphs(RulerCount).Text = sTemp & vbCrLf
.TextRange.Paragraphs(RulerCount).IndentLevel = RulerCount
Next
For RulerCount = 1 To 5
.Ruler.Levels(RulerCount).FirstMargin = 10 * RulerCount 'rulerFirstMargin(rulerCount) '.LeftMargin = rulerLeftMargin
.Ruler.Levels(RulerCount).LeftMargin = 20 * RulerCount 'rulerLeftMargin(rulerCount) 'Left indent marker
Next RulerCount
End With
End Sub