Word VBA Макросы: Обработка выделения в сносках

Автор Anton, 09 ноября 2017, 09:08

Anton

Здравствуйте!
Из другого поста следует, что передать подпрограмме параметр, который будет указывать на обработку выделенного фрагмента или всего документа, можно:

Спойлер

Sub макрос()
    Dim rng As Range
   
    ' Присваиваем имя "rng" выделенному фрагменту, иначе при действиях с текстом,
        ' Selection изменяется.
    Set rng = Selection.Range.Duplicate
'    ' Присваиваем имя "rng" основному тексту.
'    Set rng = ActiveDocument.Range.Duplicate
    ParList2TextSel rng
End Sub

Private Sub ParList2TextSel(rng As Range)
    Dim i&, li, fli, ls$
   
    ' Цикл по абзацам объекта "Range".
    For i = rng.Paragraphs.Count To 1 Step -1
        With rng.Paragraphs(i).Range
            ls = .ListFormat.ListString    'текст нумерации
            If ls <> "" Then    'есть нумерация
                li = .ParagraphFormat.LeftIndent
                fli = .ParagraphFormat.FirstLineIndent
                .InsertBefore ls & ChrW(160)
                .ListFormat.RemoveNumbers wdNumberParagraph
                .ParagraphFormat.LeftIndent = li
                .ParagraphFormat.FirstLineIndent = fli
            End If
        End With
    Next
End Sub
[свернуть]

Но как быть, когда выделенная область находится в сносках? Какой параметр надо передавать?

Администратор

Можно использовать объект "Selection". Для Selection не имеет значения, где выделено.

Anton

А можно ли как-то определить, где находится выделенный фрагмент - в сносках или не в сносках?

Администратор

Макрос
Sub macro()

    Select Case Selection.StoryType
        Case wdMainTextStory
            MsgBox "основной текст", vbInformation
        Case wdFootnotesStory
            MsgBox "страничные сноски", vbInformation
        Case wdEndnotesStory
            MsgBox "концевые сноски", vbInformation
    End Select

End Sub
[свернуть]