1

最近、2007 および 2010 をサポートするように PowerPoint アドインの 1 つをアップグレードしました。ほとんどの項目は問題なく移植できました。私たちが抱えている問題の 1 つは、アドインを使用してテーブルまたは図形を作成するときにインデントが機能しないことです。

例: 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

なぜこれが機能しないのですか?

次のスレッドも読みましたが、あまり役に立ちませんでした 。 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
4

1 に答える 1

1

FWIW、2007 年以降では、以前のバージョンの 5 つではなく、最大 9 つのルーラー レベルを使用できるようになりました。ただし、コードはそのまま機能するはずです。これは、テーブルの任意のセル (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

もう 1 つの問題は、特定の種類の書式設定 (ルーラー設定を含む) を好きなだけ適用できることです。適用しているレベルにテキストがない場合、PPT は吠えません。それはあなたを無視します。設定は影響しません。場合によっては、テキストをチェックし、存在しない場合 (現実の世界では非常にありそうもないもの) を入力してから、ありそうもないテキストのすべてのインスタンスを後で削除する必要があります。

醜い。はい。

ここでは、各インデント レベルを FORMAT する前に、テキストを追加してインデント レベルを設定します。

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
于 2011-07-07T21:43:36.657 に答える