gpt4 book ai didi

vba - 使用VBA设置项目符号和子项目符号

转载 作者:行者123 更新时间:2023-12-02 14:38:00 27 4
gpt4 key购买 nike

当我突出显示文本的一部分并运行宏时,我想在 powerpoint 上创建一个宏。它将创建一个 1 级圆形子弹。我打算使用它作为基础来创建级别 2(子项目符号,嵌套在级别 1 中)和级别 3,但无法弄清楚我的代码出了什么问题。请问这里有高手可以给我一些指导吗?

我想要实现的是这样的,最终我会有3个按钮作为addin,并且通过点击按钮可以自由切换1级到3级的子弹样式。

  • 1 级文本
  • 2 级文本
    • 2 级文本
      • 3 级文本
      • 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

最佳答案

这是一条正确的道路,但我看到两个主要问题。

其中之一是,您实际上没有任何处理设置不同缩进级别的方法 - 它只是假设我们将缩进级别设置为 1。但是如果您想将缩进级别设置为 2、3、4,等等,那么你就不想编写一个全新的子程序。因此,最好让子程序接受一个变量(my_level),并使用它来设置缩进和缩进级别,如下所示。然后,您只需将三个缩进按钮指向它们自己的调用者子项,该子项就会传递适当的缩进级别。

请注意,第一行缩进始终为 -20 - 仅当您希望每个级别中的项目符号和文本之间的间距不同时,才需要更改此值。 LeftIndent 值只是 my_level 值的倍数。

我看到的另一个问题是您使用标尺对象来设置缩进。问题是,这样做会影响形状中所有其他文本的缩进,包括未选择的文本。 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

关于vba - 使用VBA设置项目符号和子项目符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47784837/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com