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

Тема в разделе "Макросы Word, Excel (VBA)", создана пользователем auto-teacher, 6 ноя 2016.

  1. auto-teacher

    auto-teacher Новый пользователь

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

    Sub Макрос()
    Если курсор в основном тексте, то:
    Операторы 1
    Если курсор в тексте сносок, то:
    Операторы 2
    End Sub
     
  2. Dragokas

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    5.337
    Симпатии:
    5.239
    Код (vb.net):

    'для обычной сноски
    Debug.Print Selection.Information(wdInFootnote)

    'для концевой сноски
    Debug.Print Selection.Information(wdInEndnote)
     
     
  3. auto-teacher

    auto-teacher Новый пользователь

    Сообщения:
    25
    Симпатии:
    4
    Извиняюсь!
    Я не могу отсюда понять, как обеспечить условный переход.
    Наверное, должно быть как-то так:

    Sub СледСноска()
    If условие ' Если курсор в области обычных сносок
    Операторы 1
    Else ' Если курсор в основном тексте
    Операторы 2
    End If
    End Sub
     
  4. Dragokas

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    5.337
    Симпатии:
    5.239
    Код (vb.net):

    Sub СледСноска()
        If Selection.Information(wdInFootnote) then
            msgbox "Операторы 1"
        Else ' Если курсор в основном тексте
            msgbox "Операторы 2"
        End If
    End Sub
     
     
  5. auto-teacher

    auto-teacher Новый пользователь

    Сообщения:
    25
    Симпатии:
    4
    Супер! Действует классно!
    Спасибо!
    Удивительно, что мозги у программистов по-разному работают!
    На другом форуме мне прислалали вместо этого:
    If Selection.Information(wdInFootnote) Then

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

    Великолепно получается и так, и так.
    Даже не знаю, какому варианту отдать предпочтение.
    Остаются еще вопросы к этой теме.
    Как описать условия действий в этих случаях:
    1. Если нет сносок, что делать?
    2. Если достиг первой сноски, что сообщить, чтобы не тыркаться напрасно?
    3. Если достиг последней сноски, что сообщить?
    Пожалуй, придется для обычных сносок выбрать один вариант, а для концевых другой, чтобы оба работали. Не так ли?
     
  6. Dragokas

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    5.337
    Симпатии:
    5.239
    В этом случае у VBA спрашивают - "Курсор (выделенный текст) относится к сноске?"
    А в этом проверяется тип текста.
    Что по факту приводит к одинаковому результату.

    Обобщить всегда можно, но проще для реализации и понимания будет прописать для каждой отдельный код, т.к. это разные объекты.
    Код (vb.net):

    'Если нет сносок
    If ActiveDocument.Footnotes.Count = 0 Then
     
    Здесь будет чуть по-сложнее:
    Код (vb.net):
    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
     
  7. auto-teacher

    auto-teacher Новый пользователь

    Сообщения:
    25
    Симпатии:
    4
    Требуется время, чтобы переварить и вставить, куда надо...
     
Загрузка...

Поделиться этой страницей

Загрузка...