1

さまざまな箇条書き項目のインデント レベルにアクセスしようとしています。だから私は簡単な関数を作成しました:

private float[] findIndentSpacing(TextRange t, int level) {
    if(level == 1) {
            RulerLevel rl = t.Parent.Ruler.Levels(2);
            //bullet must start at 0 on the first level for now
            return new float[2] { 0, rl.LeftMargin * Settings.Scaler() };
        } else {
            RulerLevel rl = t.Parent.Ruler.Levels[level];
            return new float[2] { rl.FirstMargin * Settings.Scaler(), rl.LeftMargin * Settings.Scaler() };
        }
    }

そのため、最初の if ステートメントは回避策です。最初のレベルの LeftMargin は、何らかの理由で常に -2.14748365E+9 を返します。最初のレベルの後にレベルを取得しようとしたところ、実際の値が返されました。そうは言っても、1 つのレベルにアクセスすると、他のすべてのレベルが変化して等しくなります。たとえば、次のようにアクセスしようとするとt.Parent.Ruler.Levels[2].FirstMargin、何らかの理由t.Parent.Ruler.Levels[3].FirstMarginで同じになります。LeftMargin も変更されます。

選択、形状、テキストなど、さまざまな方法でルーラー オブジェクトにアクセスしようとしましたが、結果を試すために考えたすべての方法は同じです。

アイデア?

詳細情報: 次のスレッドを読みましたが、読むよりも書くことに重点を置いていますが、問題は似ているように感じます: PowerPoint プログラミング: ルーラー マージン レベルでのインデントが機能しない? 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 Iこれを作成しました:ページ=1&tm=1336535132591

4

1 に答える 1

2

2007 年と 2010 年には、TextRange2 および TextFrame2 オブジェクトを使用する必要があると思います。

PPT 2003 以前では、TextFrame は 5 つのインデント レベルを持つことができ、特定のインデント レベルのすべての段落は同じ LeftMargin と FirstMargin を共有していました。

2007 年以降、TextFrame は最大 9 つのインデント レベルを持つことができ、同じインデント レベルの他の段落に設定されたマージンとは関係なく、各段落に独自の左/最初のマージンを設定できます。

PPT の VBA IDE でこれを試してください。次に、見ているテキストを選択します。

Sub Levels()
  Dim oSh as Shape
  Dim x As Long

  Set oSh = ActiveWindow.Selection.ShapeRange(1)

  With oSh.TextFrame2.Ruler
    For x = 1 to .Count
      Debug.Print .Levels(x).FirstMargin
      Debug.Print .Levels(x).LeftMargin
    Next
  End With

End Sub
于 2012-05-10T15:13:12.677 に答える