[VBA] Курсор в поле сноски или в основном тексте?

auto-teacher

Новый пользователь
Сообщения
25
Реакции
4
Плохо владею VBA, не знаю объектов Word.
Помогите, please, выполнить условия в макрокоманде.

Sub Макрос()
Если курсор в основном тексте, то:
Операторы 1
Если курсор в тексте сносок, то:
Операторы 2
End Sub
 
VB.NET / VBA:
'для обычной сноски
Debug.Print Selection.Information(wdInFootnote)

'для концевой сноски
Debug.Print Selection.Information(wdInEndnote)
 
Извиняюсь!
Я не могу отсюда понять, как обеспечить условный переход.
Наверное, должно быть как-то так:

Sub СледСноска()
If условие ' Если курсор в области обычных сносок
Операторы 1
Else ' Если курсор в основном тексте
Операторы 2
End If
End Sub
 
VB.NET / VBA:
Sub СледСноска()
    If Selection.Information(wdInFootnote) then
        msgbox "Операторы 1"
    Else ' Если курсор в основном тексте
        msgbox "Операторы 2"
    End If
End Sub
 
Супер! Действует классно!
Спасибо!
Удивительно, что мозги у программистов по-разному работают!
На другом форуме мне прислалали вместо этого:
If Selection.Information(wdInFootnote) Then

вот такое:
If Selection.StoryType = wdFootnotesStory Then

Великолепно получается и так, и так.
Даже не знаю, какому варианту отдать предпочтение.
Остаются еще вопросы к этой теме.
Как описать условия действий в этих случаях:
1. Если нет сносок, что делать?
2. Если достиг первой сноски, что сообщить, чтобы не тыркаться напрасно?
3. Если достиг последней сноски, что сообщить?
Пожалуй, придется для обычных сносок выбрать один вариант, а для концевых другой, чтобы оба работали. Не так ли?
 
If Selection.Information(wdInFootnote) Then
В этом случае у VBA спрашивают - "Курсор (выделенный текст) относится к сноске?"
If Selection.StoryType = wdFootnotesStory Then
А в этом проверяется тип текста.
Что по факту приводит к одинаковому результату.

Пожалуй, придется для обычных сносок выбрать один вариант, а для концевых другой, чтобы оба работали. Не так ли?
Обобщить всегда можно, но проще для реализации и понимания будет прописать для каждой отдельный код, т.к. это разные объекты.
VB.NET / VBA:
'Если нет сносок
If ActiveDocument.Footnotes.Count = 0 Then

2. Если достиг первой сноски, что сообщить, чтобы не тыркаться напрасно?
3. Если достиг последней сноски, что сообщить?
Здесь будет чуть по-сложнее:
VB.NET / VBA:
Sub test()
    'кол-во сносок > 0 и курсор находится в основном документе?
    If ActiveDocument.Footnotes.Count <> 0 And Selection.StoryType = wdMainTextStory Then
       
        'позиция курсора находится на позиции 1-й сноски?
        If (Selection.Start = ActiveDocument.Footnotes(1).Reference.Start) Then
       
            MsgBox "Достигли первой сноски."
           
        ElseIf (Selection.Start = ActiveDocument.Footnotes(ActiveDocument.Footnotes.Count).Reference.Start) Then
       
            MsgBox "Достигли последней сноски."
       
        End If
    End If
End Sub
 
Назад
Сверху Снизу