Программирование в 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
Другие вопросы по тегам