2012-05-09 27 views
1

我試圖訪問各種項目符號列表項的縮進層次。所以我創建了一個簡單的函數:PowerPoint中編程:問題試圖訪問統治者利潤率

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。我試圖在第一次之後抓住關卡,並返回實際值。也就是說,在訪問了一個關卡之後,所有其他關卡都會發生變化並變得平等。例如,如果我嘗試訪問:t.Parent.Ruler.Levels[2].FirstMargin,然後由於某種原因t.Parent.Ruler.Levels[3].FirstMargin變爲相同,等等。 LeftMargin也改變。

我試過以不同的方式訪問標尺對象:通過選擇,通過形狀,文本和每一種方式我認爲嘗試結果是一樣的。

想法?

更多信息: 我閱讀下面的線程,但它們更多的是關於比閱讀寫作,但我覺得這個問題是相似的:PowerPoint Programming: Indentation with Ruler margin levels not working? 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 我這個做一個:http://answers.microsoft.com/en-us/office/forum/office_2010-customize/find-bullet-spacing-information-in-an-automated/4525b6b8-6331-4f33-8127-789ea3641589?page=1&tm=1336535132591

+0

我使用PowerPoint 2010 btw。 – Parris

回答

2

在2007年和2010年我認爲你需要使用TextRange2和TextFrame2對象。

在PPT 2003和之前版本中,TextFrame可能有5個縮進級別,並且給定縮進級別的所有段落共享相同的LeftMargin和FirstMargin。

從2007年開始,TextFrames最多可以有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 
+0

是的,工作...我覺得這是對我說的20倍,但它從來沒有完全點擊,有一堆單獨的類/對象。 – Parris

+0

另外,一個或多個音符,這需要導入/包括Microsoft.Office.Core命名空間VS只是互操作。 – Parris