Программирование в PowerPoint: отступы с уровнями линейки не работают? - PullRequest
1 голос
/ 07 июля 2011

Недавно мы обновили одно наше дополнение 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#tabs

Обновлен код:

 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 Ответ

1 голос
/ 08 июля 2011

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
...