我正在尝试访问各种项目符号列表项的缩进级别。所以我创建了一个简单的函数:
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 :(得分:2)
在2007年和2010年,我认为您需要使用TextRange2和TextFrame2对象。
在PPT 2003和之前的版本中,TextFrame可以有5个缩进级别,并且给定缩进级别的所有段落共享相同的LeftMargin和FirstMargin。
从2007年开始,TextFrames最多可以有9个缩进级别,每个段落都可以有自己的Left / First边距,与在同一缩进级别的其他段落上设置的边距无关。
在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