1. Администрация SafeZone приветствует вас на нашем форуме!
    Если вы больше не желаете видеть рекламу при просмотре тем и сообщений - то достаточно просто зарегистрироваться. Для зарегистрированных пользователей реклама не отображается.
    Если у вас возникли проблемы с регистрацией на форуме - то вы можете сообщить об этом с помощью этой формы без авторизации,администрация форума обязательно отреагирует на вашу проблему.
    Скрыть объявление

[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.215
    Симпатии:
    5.085
    Код (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.215
    Симпатии:
    5.085
    Код (vb.net):

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

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

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

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

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

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

    Сообщения:
    5.215
    Симпатии:
    5.085
    В этом случае у 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
    Требуется время, чтобы переварить и вставить, куда надо...
     
Загрузка...

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