Это один из верных путей, но я вижу две основные проблемы.
Во-первых, у вас нет никакой обработки для установки разных уровней отступа — он просто предполагает, что мы устанавливаем уровень отступа равным 1. Но если вы хотите установить уровень отступа для 2, 3, 4 и т. д., тогда Вы не хотите писать совершенно новый саб. Итак, лучше всего, чтобы подпрограмма принимала переменную (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
person
egerz
schedule
11.08.2019