![]() ![]() колонтитул в word 2007, 0000002111
Этапы проектирования и записи макросаЗадание стартовых условий для макросаПеред записью какого-либо макроса не- обходимо задать условия, при которых данный макрос будет запускаться позже. Выполнение макроса означает воспроизведение записанных в этом макросе инструкций. Предположим, на- пример, что необходимо создать мак- рос, который будет применять опреде- ленный шрифт, размер и цвет шрифта в любом выбранном тексте документа. Стартовыми условиями для этого макроса будут открытый документ с выделенным блоком текста. Запись макроса включает четыре основных этапа:
Необходимо задать стартовые условия для макроса перед тем, как запускать макрорекордер, потому что макрорекордер будет записывать все действия, которые выполняются. Если запустить рекордер, а затем открыть некоторый документ и выделить текст, то эти действия станут частью полученного в результате записи макроса. Получившийся макрос будет очень специфическим: он будет всегда открывать один и тот же документ и форматировать один и тот же блок текста. Для создания общего макроса, который можно использовать для форматирования любого выбранного текста, надо запускать макрорекордер после открытия документа и выбора текста. Запуск макрорекордера и присвоение имени макросуОбычно запуск макроса можно осуществить пунктом меню "Сервис - Макрос - Начать запись". В диалоговом окне необходимо ввести имя макроса и выбрать место для его сохранения. ![]() Диалоговое окно "Запись макроса" позволяет по выбору назначать горячую клавишу для запуска нового макроса или добавлять новый макрос как кнопку на панели инструментов. Имена макросов должны начинаться с буквы, хотя они могут содержать числа. Имена макросов не могут включать пробелы или знаки препинания. Текстовое окно "Имя макроса". По умолчанию VBA выбирает имя макроса, состоящее из слова "Макрос", за которым следует номер, соответствующий числу макросов, которые уже созданы в этом сеансе работы. Следует вводить макросам имена, которые несут определенную информацию о том, что выполняют макросы. Текстовое окно "Описание". Данная информация макросом непосредственно не используется. Это окно предназначено для вода некоторых замечаний и комментариев о том, что выполняет данный макрос. Раскрывающийся список "Макрос доступен для". Этот список позволяет выбрать, где следует сохранить записанный макрос. Макросы, записанные в Word, всегда сохраняются в файле документа (.doc) или в файле шаблона документа (.dot). Макросы, записываемые в Excel, всегда сохраняются в файле рабочей книги (.xls). Пример реализации макроса - цель: выровнять по разделителю цифры в столбце таблицы. Sub CellAlignDecimal()
Макрос простой, но имеет ряд особенностей работы с таблицей, на которые стоит обратить внимание:Dim oTbl As Table 'Таблица, в которой работаем Dim oCell As Cell 'Ячейка таблицы Dim c As Integer 'Количество столбцов в таблице Set oTbl = Selection.Tables(1) 'Работаем в таблице, где находится курсор Set oCell = oTbl.Range.Cells(1) 'Первая ячейка таблицы c = oTbl.Columns.Count 'Перебор всех ячеек Do 'Обрабатываем ячейки только в последнем столбце If oCell.ColumnIndex = c Then With oCell.Range.ParagraphFormat .Alignment = wdAlignParagraphJustify 'Абзац выравниваем по ширине .FirstLineIndent = 0 'Отступ первой строки убираем .TabStops.ClearAll 'Убираем все отступы табуляции в ячейке 'Ставим позицию табуляции по разделителю посередине ячейки .TabStops.Add oCell.Width / 2, wdAlignTabDecimal, wdTabLeaderSpaces End With End If Set oCell = oCell.Next DoEvents Loop Until oCell Is Nothing End Sub
Например, в этом случае табуляция проставилась: - как видно, позиция табуляции находится чуть дальше 16,5 см, если верить линейке, но, если вызывать окно табуляции для данного абзаца, то там будет стоять цифра 1,62 см. Это вызвано тем, что позиция табуляции отсчитывается не от начала страницы, как можно подумать, глядя на линейку, а от начала текста, который этой табуляцией выравнивается. Поэтому в коде позицию табуляции я вычисляю по ширине ячейки (строка 19). Из полезного, хочу отметить оператор DoEvents, который временно передаёт управление приложению, чтобы оно выполнило накопившиеся задачи и дало знать операционной системе, что всё в порядке. Этот оператор очень хорошо показывает себя именно в таких циклах, где перебор осуществляется внутри больших коллекций элементов.Макрос сэкономил мне массу времени, но его можно усовершенствовать: добавить диалог ввода номера(ов) столбца(ов), в ячейки которого(ых) нужно обработать. Также, если передавать его неискушённому пользователю, следует предусмотреть проверку, что курсор находится в таблице. И напоследок. Как быть, если нужно установить позицию табуляции не посередине ячейки, а в другом её месте? Как вычислить это место внутри ячейки? Прежде всего, нужно это место записать в переменную типа Range, а затем, используя метод Range.Information(wdHorizontalPositionRelativeToTextBoundary), получить положение этого диапазона относительно текста ячейки колонтитулы в word 2007, 000000211111
Рекомендуем в повседневной деятельности:
![]() ![]() |