我想在powerpoint上创建一个宏,当我突出显示文本的一部分并运行宏时。它会创建一个1级圆形子弹。 我打算用它作为创建2级(子级项目,嵌套在1级)和3级的基础,但无法弄清楚我的代码有什么问题。 这里有专家能给我一些方向吗?
我想要实现的是这样的,最终我将有3个按钮作为插件,通过单击按钮可以自由切换1级到3级子弹样式。
Sub ApplyLBulletsToSelectedCode()
On Error Resume Next
Err.Clear
Dim oText As TextRange
Set oText = ActiveWindow.Selection.TextRange
If Err.Number <> 0 Then
MsgBox "No text was selected. Please highlight some text " _
& "or select a text frame and run the macro again.", vbExclamation
End
End If
With oText
.ParagraphFormat.Alignment = ppAlignLeft
.IndentLevel = 1
With .Parent.Ruler
.Levels(1).FirstMargin = 20
.Levels(1).LeftMargin = 0
End With
With .ParagraphFormat.Bullet
.Visible = msoCTrue
.RelativeSize = 1
.Character = 159
With .Font
.Color.RGB = RGB(0, 0, 0)
.Name = "Wingdings"
End With
End With
With .Font
.Name = "Calibri"
.Bold = msoFalse
.Color.RGB = RGB(0, 0, 0)
.Size = 14
End With
End With
End Sub
答案 0 :(得分:0)
这是一条正确的路,但是我看到了两个主要问题。
一个是您对设置不同的缩进级别确实没有任何处理-只是假设我们将缩进级别设置为1。但是如果您想将缩进级别设置为2、3、4,等等,那么您就不必编写一个新的子程序。因此,最好让sub接受变量(my_level),并使用该变量设置缩进和缩进级别,如下所示。然后,您只需将三个缩进按钮指向它们自己的调用者子,它们便会经过适当的缩进级别。
请注意,第一行缩进始终为-20-仅当您希望每个级别的项目符号和文本之间的间距不同时,才需要更改此值。 LeftIndent值只是my_level值的倍数。
我看到的另一个问题是您正在使用Ruler对象设置缩进量。问题在于,这样做会影响形状中所有其他文本的缩进,包括未选中的文本。 TextRange2包含.ParagraphFormat.FirstLineIndent和.ParagraphFormat.LeftIndent属性,这会将您的更改本地化为所选文本。但是,您要更改的某些属性在TextRange2中不可用,因此您需要根据选择设置两个不同的变量,一个用于TextRange,一个用于TextRange2。
请注意,设置缩进级别后,必须在 之后设置.FirstLineIndent和.LeftIndent属性。如果要在下面的代码中将oText2部分移到oText部分之前,则缩进将无法正确设置。
这应该为您指明正确的方向:
Sub CallLevel1()
ApplyLBulletsToSelectedCode (1)
End Sub
Sub CallLevel2()
ApplyLBulletsToSelectedCode (2)
End Sub
Sub CallLevel3()
ApplyLBulletsToSelectedCode (3)
End Sub
Sub ApplyLBulletsToSelectedCode(my_level As Long)
On Error Resume Next
Err.Clear
Dim oText As TextRange
Dim oText2 As TextRange2
Set oText = ActiveWindow.Selection.TextRange
Set oText2 = ActiveWindow.Selection.TextRange2
If Err.Number <> 0 Then
MsgBox "No text was selected. Please highlight some text " _
& "or select a text frame and run the macro again.", vbExclamation
End
End If
With oText
.Paragraphs.IndentLevel = my_level
With .ParagraphFormat.Bullet
.Visible = msoCTrue
.RelativeSize = 1
.Character = 159
With .Font
.Color.RGB = RGB(0, 0, 0)
.Name = "Wingdings"
End With
End With
With .Font
.Name = "Calibri"
.Bold = msoFalse
.Color.RGB = RGB(0, 0, 0)
.Size = 14
End With
End With
With oText2
.ParagraphFormat.Alignment = ppAlignLeft
.ParagraphFormat.FirstLineIndent = -20
.ParagraphFormat.LeftIndent = 20 * my_level
End With
End Sub