Программирование в PowerPoint: отступы с уровнями линейки не работают?
Недавно мы обновили одно наше дополнение PowerPoint для поддержки 2007 и 2010 годов. Большинство элементов мы смогли перенести без проблем. у нас есть одна проблема: отступы не работают при создании таблиц или фигур с использованием надстройки.
например: та же таблица удаляется с правильным отступом в 2003 году, но то же самое не получает отступ при добавлении в использование 2007.
ниже приведен фрагмент кода, который позволяет делать отступы:
With PropertyValues.ObjShape.Table.Cell(row, col).Shape.TextFrame.Ruler
For rulerCount = 0 To 5
.Levels(rulerCount).FirstMargin = rulerFirstMargin(rulerCount) '.LeftMargin = rulerLeftMargin
.Levels(rulerCount).LeftMargin = rulerLeftMargin(rulerCount) 'Left indent marker
Next rulerCount
End With
Есть идеи, почему это не работает?
Я тоже читал следующую ветку, но мне не очень помогло http://answers.microsoft.com/en-us/office/forum/office_2007-customize/why-shapetextframerulerlevelsi-cant-set-the-bullet/9eac3e46-b13b-433e-b588-216ead1d9c1a?tab=AllReplies
Обновленный код:
PropertyValues.ObjShape.Table.Cell(row, col).Shape.TextFrame.TextRange.Text = "N/A"
With PropertyValues.ObjShape.Table.Cell(row, col).Shape.TextFrame
'Dim rulerCount As Short
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
PropertyValues.ObjShape.Table.Cell(row, col).Shape.TextFrame.TextRange.Text = text
1 ответ
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