многоуровневый список без отступа в word vba

avatar
Ibn e Ashiq
8 августа 2021 в 21:24
165
1
0

У меня есть макрос, который ищет [#] в документе и делает его числом в списке с многоуровневым. Каждый хэштег представляет номер уровня. то есть

  • [#] уровень 1 - - результат - -> 1.
  • [##] уровень 2 -- результат --> 1.1.
  • [###] уровень 3 -- результат --> 1.1.1.

Так что все работает нормально. Но я не хочу, чтобы мой текст получал отступ, а оставался на уровне отступа. поскольку мой текст находится в таблице, он сходит с ума при отступе.

рабочий код здесь:

Sub Nummerierung_Numeric()

'Makro Written by M.B.A

Dim Level As Integer

    With ActiveDocument.Range.Find 'or Selection.Range.Find
        .Text = "\[#*\]"
        .MatchWildcards = True
        
        Do While .Execute
        If .Parent.Information(wdWithInTable) Then
                Level = Len(.Parent.Text) - 2
                .Parent.Style = ActiveDocument.Styles("1 / 1.1 / 1.1.1")
                .Parent.ListFormat.ListLevelNumber = Level
                .Parent.Delete
        End If
        Loop
        
        .MatchWildcards = False
    End With
End Sub
Источник
freeflow
9 августа 2021 в 01:45
0

Вы меняете их прикладной стиль на тот, который не имеет толкования. Самый логичный способ сделать это — определить набор стилей, которые наследуются от стилей, которые вы используете в настоящее время, но имеют другое правило отступа.

Ответы (1)

avatar
Raymond Wu
9 августа 2021 в 02:57
2

Вы можете изменить настройку стиля 1 / 1.1 / 1.1.1 таким образом, чтобы любой абзац, использующий этот стиль, не имел отступа, но обратите внимание, что это может повлиять на абзацы, для которых может потребоваться отступ (в этом случае вам нужно будет определить новый стиль для этого стиля). цель):

    Const newNumPos As Long = 0
    Const newTextPos As Long = 18 'Change as required, this is the Text Indent (in Points)
    
    With ActiveDocument.Styles("1 / 1.1 / 1.1.1").ListTemplate
        .ListLevels(1).TextPosition = newTextPos
        .ListLevels(1).NumberPosition = newNumPos
        
        .ListLevels(2).TextPosition = newTextPos
        .ListLevels(2).NumberPosition = newNumPos
                
        .ListLevels(3).TextPosition = newTextPos
        .ListLevels(3).NumberPosition = newNumPos
    End With
Ibn e Ashiq
10 августа 2021 в 06:37
0

хотя это не ответ на мой вопрос, однако вы дали мне хорошую идею. Я ценю его. Спасибо!

Raymond Wu
10 августа 2021 в 06:40
0

@IbneAshiq Тогда вам придется объяснить remain in their indent level, что это значит?