Макросы: как назначить сложные действия сочетанию клавиш — КиберПедия 

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Макросы: как назначить сложные действия сочетанию клавиш

2019-09-26 332
Макросы: как назначить сложные действия сочетанию клавиш 0.00 из 5.00 0 оценок
Заказать работу

Описанный выше алгоритм автонумерации рисунков предполагает достаточно много повторяющихся рутинных действий, связанных с нажатием определенных кнопок на лентах. Гораздо более простой последовательностью действий была бы такая: заносим название будущей закладки в буфер обмена привычным сочетанием клавиш, пишем в абзаце под рисунком подпись, выделяем рисунок и нажимаем простое сочетание клавиш типа Alt+W.  Как-то так:

Вводим название закладки:

Вырезаем его (сочетание клавиш Ctrl+X помещает выделенные символы в буфер обмена и удаляет их из основного текста), выделяем рисунок (щелкаем по нему левой клавишей мыши) и нажимаем Ctrl+W:

Открываем список перекрестных ссылок и видим:

 

Конечно, это не моментальное действие, но оно осуществляется довольно быстро, потому что не требует обращения к каким-либо меню и панелям.

Для осуществления подобных действий существует специальный инструмент — макросы. Макрос — это программа на языке Visual Basic, использующая дополнительные библиотеки Word, которая выполняет с текстом действия, имитирующие действия пользователя. То, что вы делаете с Вордом как пользователь, можно запрограммировать с помощью макросов.

Для создания макросов (теоретически) не требуется изучать Visual Basic. Существует автоматическое средство записи макросов, которое способно автоматизировать 90% любой желаемой операции. Рассмотрим, как оно работает.

Открываем панель Вид и справа видим кнопку:

По нажатию открывается окно записи макроса. Выбираем шаблон типа *.dotm, а также щелкаем кнопку клавишам, чтобы назначить соответствующее сочетание.

Когда подготовка сделана, жмем ОК и выполняем желаемую последовательность действий (конкретно, назначаем имя рисунка — см. раздел по автонумерации). Когда все готово, останавливаем запись кнопкой внизу окна.

А теперь попробуйте запустить макрос для разных рисунков, выделив надпись и нажав Alt+W. Код выполняется не совсем правильно. Во-первых, имя закладки всегда одно и то же — ss_united_states. Во-вторых, вероятно, вместо номера рисунка в качестве ссылки вставляется какой-то случайный отрывок символов. Чтобы понять, почему так происходит, посмотрим код. Открываем список макросов (Макросы " Макросы) и жмем Изменить.

 Открывается редактор Visual Basic.

К сожалению, полнофункциональный код с помощью средства создания макросов не создать, придется программировать. Вот как должен выглядеть код — см. листинг 1. Весьма неожиданным хаком для его корректной работы является необходимость подключить библиотеку Microsoft Forms 2.0 Object Library, которая находится в файле FM20.DLL системной папки. Подключается через меню редактора Visual Basic Tools "   References

Описание работы кода должно быть понятно из комментариев (строки, помеченные в начале апострофом). В редакторе они будут выделены зеленым цветом.

А чтобы увидеть, что происходит с текстом при выполнении макроса, поставьте брейкпоинт (левой кнопкой мыши на сером поле — см. красную линию), вызовите макрос с помощью Alt+W и наблюдайте за каждым действием, нажимая F8. Код Visual Basic осуществляет манипуляции с текстом, как если бы это был пользователь.

Листинг 1. Макрос для автонумерации рисунков

Sub Автонумерация_рисунков()

'

' Автонумерация_рисунков Макрос

'

' Поместим содержимое буфера обмена в переменную t

Dim MyData As DataObject

Set MyData = New DataObject

Dim t As String

On Error GoTo NotText

MyData.GetFromClipboard

t = MyData.GetText(1)

'Вставляем название (номер) рисунка под выделенным рисунком

With CaptionLabels("Рисунок")

  .NumberStyle = wdCaptionNumberStyleArabic

  .IncludeChapterNumber = False ‘True, если в документе есть главы

End With

 

Selection.InsertCaption Label:="Рисунок", TitleAutoText:="InsertCaption2", _

    Title:="", Position:=wdCaptionPositionBelow, ExcludeLabel:=1

'Возвращаем каретку в начало строки, пишем «Рисунок»

Selection.HomeKey Unit:=wdLine

Selection.TypeText Text:="Рисунок "

Selection.HomeKey Unit:=wdLine

'Выделяем только что вставленный номер рисунка

Selection.MoveRight Unit:=wdCharacter, Count:=8

Selection.EndKey Unit:=wdLine, Extend:=wdExtend

'Добавляем закладку

With ActiveDocument.Bookmarks

  .Add Range:=Selection.Range, Name:=t 'Имя закладки из переменной

  .DefaultSorting = wdSortByName

  .ShowHidden = False

End With

'После надписи вставляем «-», причем тире имеет тип en dash (среднее тире)

Selection.EndKey Unit:=wdLine

Selection.Delete Unit:=wdCharacter, Count:=1

Selection.TypeText Text:=(" " & ChrW(&H2013) & " ")

Selection.HomeKey Unit:=wdLine

'Применяем стиль

On Error GoTo NoStyle

Selection.Style = ActiveDocument.Styles("Подрисуночная подпись")

'Обработчики ошибок

NotText:

If Err.HelpContext = 1000440 Then

MsgBox "Название рисунка должно содержаться в буфере обмена!"

End If

NoStyle:

If Err.Number = 5941 Then

MsgBox "Стиль 'Подрисуночная подпись' не существует!"

End If

End Sub

Проверьте, что теперь все работает так, как написано в начале раздела. Проделайте аналогичные действия для нумерации формул, задав в качестве сочетания клавиш, например, Alt+Q. Если вы забыли назначить сочетание клавиш при создании макроса, вызовите Параметры Word " Настройка " Сочетания клавиш " Настройка.

 

То же самое можно применить к формулам. Скопируйте название формулы в буфер обмена, введите формулу (объект Microsoft Equation 3.0), поставьте курсор справа от формулы и запустите макрос. Если после формулы стоит знак препинания (. или,), макрос не будет работать правильно. Проверьте, где именно произойдет сбой. Предложите улучшения в код.

Листинг 2. Макрос для автонумерации формул

Sub формулНумерация()

'

' формулНумерация Макрос

'

' Поместим содержимое буфера обмена в переменную t

Dim MyData As DataObject

Set MyData = New DataObject

Dim t As String

On Error GoTo NotText

MyData.GetFromClipboard

t = MyData.GetText(1)

  

 

Selection.TypeText Text:=vbTab

Selection.TypeText Text:="("

  

Selection.InsertCaption Label:="Формула", TitleAutoText:="InsertCaption1", _

    Title:="", Position:=wdCaptionPositionBelow, ExcludeLabel:=1

  

     

Selection.EndKey Unit:=wdLine

Selection.TypeText Text:=")"

   

On Error GoTo NoStyle

Selection.Style = ActiveDocument.Styles("Формула")

   

Selection.EndKey Unit:=wdLine

Selection.HomeKey Unit:=wdLine, Extend:=wdExtend

Selection.MoveRight Unit:=wdCharacter, Count:=2, Extend:=wdExtend

'закладка

With ActiveDocument.Bookmarks

  .Add Range:=Selection.Range, Name:=t 'Имя закладки из переменной

  .DefaultSorting = wdSortByName

  .ShowHidden = False

End With

'Обработчики ошибок

NotText:

If Err.HelpContext = 1000440 Then

MsgBox "Название формулы должно содержаться в буфере обмена!"

End If

  

NoStyle:

If Err.Number = 5941 Then

MsgBox "Стиль ‘Формула' не существует!"

End If

End Sub

 

Рассмотрим сценарий использования этого макроса. Вы вводите в основном тексте название закладки, вырезаете её (Ctrl+X), помещая в буфер обмена, затем ставите курсор на строку с формулой и нажимаете Alt+Q. Макрос отрабатывает. Однако теперь как правило необходимо вставить закладку в текст, чтобы в тексте была ссылка на рисунок/формулу. Часто место вставки ссылки заранее известно, поэтому для упрощения работы по вёрстке можно ввести дополнительный макрос — ссылка на закладку. Этот макрос будет также работать и для рисунков.

 

Sub insert_ref()

'

' insert_ref Макрос

'

'

' Поместим содержимое буфера обмена в переменную t

Dim MyData As DataObject

Set MyData = New DataObject

Dim t As String

On Error GoTo NotText

MyData.GetFromClipboard

t = MyData.GetText(1)

 

Selection.InsertCrossReference ReferenceType:="Закладка", ReferenceKind:= _

   wdContentText, ReferenceItem:=t, InsertAsHyperlink:=True _

  , IncludePosition:=False, SeparateNumbers:=False, SeparatorString:=" "

       

NotText:

If Err.HelpContext = 1000440 Then

MsgBox "Название закладки, которую нужно вставить, должно содержаться в буфере обмена!"

End If

End Sub

 

Если макрос не срабатывает или работает неправильно, возможные причины:

1. Макросы в Word отключены;

2. Имя закладки некорректное: длиннее 40 символов или содержит тире и другие запрещенные знаки;

3. В строке с формулой, кроме формулы, есть дополнительные знаки: пробелы, табуляции, точка/запятая и т.п. Убедитесь в этом, отобразив непечатаемые знаки;

4. В документе нет стиля «Формула» или «Подрисуночная подпись».

Чтобы назначить макросу сочетание клавиш, необходимо вызвать пункт меню Файл -> Параметры -> Настройка ленты. На рисунке ниже рамкой обведена кнопка «Настройка», позволяющая настроить сочетания клавиш в т.ч. макросам.

 

 

Нажмите «Назначить», затем «Закрыть» и в основном окне настроек «ОК».

Может быть, вам сейчас кажется, что запоминать сочетания клавиш — это слишком сложно, проще все делать через меню. Однако практика показывает, что продуктивность работы значительно повышается при использовании именно сочетаний клавиш, и по этой причине все современные программы, от инженерных пакетов (CAD) до систем создания музыки (DAW), имеют целую палитру встроенных сочетаний клавиш. Word в этом смысле тоже не исключение. Жирный и курсив вы ведь применяете с помощью Ctrl+B и Ctrl+I?


 


Поделиться с друзьями:

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.054 с.