Редактирование документов Word из кода VBA Excel. Добавление и форматирование текста. Объект Word.Range, свойство Text, методы InsertAfter и InsertBefore.
Работа с Word из кода VBA Excel
Часть 3. Редактирование документов Word
[Часть 1] [Часть 2] [Часть 3] [Часть 4] [Часть 5] [Часть 6]
Добавление текста в новый документ
Основные объекты, использующиеся в VBA Word для определения места вставки, добавления и форматирования текста – это Selection (выделение), Range (диапазон) и Bookmark (закладка).
Selection и Range позволяют заполнять текстом новые документы или редактировать существующие. Закладки можно использовать для вставки изменяемых реквизитов в шаблоны различных документов: договоры, акты, справки.
Объект Range имеет преимущество перед объектом Selection, так как он может быть создан только программно и не зависит от действий пользователя. Если для вставки и форматирования текста будет использоваться объект Selection, а пользователь во время работы программы просто поставит курсор в другое место документа, результат будет непредсказуем.
Word.Range кардинально отличается от объекта Range в Excel. В приложении Word он представляет из себя набор из одного или множества символов. А также он может вообще не содержать ни одного символа, а быть указателем ввода текста (виртуальным курсором).
Объект Range возвращается свойством Range других объектов приложения Word: Document, Selection, Bookmark, Paragraph, Cell (объект Table).
Вставка текста без форматирования
Если текст вставляется без форматирования, достаточно одной строки кода (myDocument – это переменная):
- Вставка текста с заменой имеющегося:
myDocument.Range.Text = "Вставляемый текст"
- Добавление текста после имеющегося:
myDocument.Range.InsertAfter "Добавляемый текст"
- Добавление текста перед имеющимся:
myDocument.Range.InsertBefore "Добавляемый текст"
Методами InsertAfter и InsertBefore можно вставить текст и на пустую страницу, также, как с помощью свойства Text. Перейти на новый абзац и начать предложение с красной строки можно с помощью ключевых слов vbCr (vbNewLine, vbCrLf) и vbTab.
Вставка текста с форматированием
Для форматирования отдельных участков текста необходимо указать диапазон символов, входящих в этот участок. Здесь нам также поможет объект Range, которому можно задать любой набор символов, содержащихся в документе Word.
Синтаксис присвоения диапазона символов объекту Range:
myDocument.Range(Start:=n, End:=m) ‘или без ключевых слов Start и End myDocument.Range(n, m) |
- myDocument – переменная;
- n – номер точки перед начальным символом;
- m – номер точки после конечного символа.
Счет точек вставки начинается с нуля. Знаки переноса строки, возврата каретки и табуляции учитываются как отдельные символы. 0 – это для объекта Word.Range виртуальная точка вставки на пустом документе, 1 – точка между первым и вторым символом, 2 – точка между вторым и третьим символом и т.д.
На пустом документе объекту Range можно присвоить только виртуальную точку вставки:
myDocument.Range(Start:=0, End:=0)
Первый символ в документе с текстом:
myDocument.Range(Start:=0, End:=1)
Диапазон с 11 по 20 символ:
myDocument.Range(Start:=10, End:=20)
Реальная точка вставки (курсор) принадлежит объекту Selection, который создается вручную или программно с помощью метода Select.
Вставка курсора в начало документа:
myDocument.Range(Start:=0, End:=0).Select
Эта строка вставит курсор между пятым и шестым символами:
myDocument.Range(Start:=5, End:=5).Select
Вставка курсора в конец документа:
myDocument.Range(.Range.Characters.Count - 1, .Range.Characters.Count - 1).Select
Ссылку на объект Range можно присвоить переменной, но при форматировании ее придется каждый раз переопределять и код получится длиннее. Пример присвоения ссылки объектной переменной:
Dim myRange As Word.Range Set myRange = myDocument.Range(Start:=0, End:=20) |
Для Range(Start:=0, End:=20)
в документе должно быть как минимум 20 символов.
Однострочные примеры редактирования и форматирования текста
Вставка дополнительного текста внутри имеющегося после заданной точки:
myDocument.Range(Start:=10, End:=10).InsertAfter "Вставляемый текст"
Новый абзац с красной строки (предыдущая строка должна заканчиваться символом возврата каретки или переноса строки):
myDocument.Range.InsertAfter vbTab & "Красная строка"
Присвоение шрифту заданного диапазона зеленого цвета:
myDocument.Range(Start:=10, End:=65).Font.ColorIndex = wdGreen
Меняем обычное начертание на курсив:
myDocument.Range(Start:=10, End:=65).Font.Italic = True
Указываем размер шрифта:
myDocument.Range(Start:=10, End:=65).Font.Size = 22
Применение стандартных стилей:
myDocument.Range(Start:=0, End:=16).Style = "Заголовок 1"
Если вас заинтересуют другие команды форматирования текста, запишите их макрорекордером в VBA Word и примените к объекту Range.
Пример 1
Добавление текста в новый документ без форматирования:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
Sub Primer1() On Error GoTo Instr Dim myWord As New Word.Application, _ myDocument As Word.Document Set myDocument = myWord.Documents.Add myWord.Visible = True With myDocument .Range.Text = «Заголовок по центру» & vbCr .Range(Start:=0, End:=19).ParagraphFormat.Alignment _ = wdAlignParagraphCenter .Range.InsertAfter _ vbTab & «Первый абзац с красной строки» & vbCr & _ «Второй абзац не с красной строки» & vbCr & _ vbTab & «Третий абзац с красной строки» End With Set myDocument = Nothing Set myWord = Nothing Exit Sub Instr: If Err.Description <> «» Then MsgBox «Произошла ошибка: « & Err.Description End If If Not myWord Is Nothing Then myWord.Quit Set myDocument = Nothing Set myWord = Nothing End If End Sub |
Пример 2
Добавление текста в новый документ с форматированием:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
Sub Primer2() On Error GoTo Instr Dim myWord As New Word.Application, _ myDocument As Word.Document Set myDocument = myWord.Documents.Add myWord.Visible = True With myDocument .Range.Text = «Заголовок по центру» & vbCr .Range(Start:=0, End:=19).Style = «Заголовок» .Range(Start:=0, End:=19).ParagraphFormat.Alignment _ = wdAlignParagraphCenter .Range.InsertAfter «Заголовок 1 не по центру» & vbCr .Range(Start:=20, End:=44).Style = «Заголовок 1» .Range.InsertAfter vbTab & «Шрифт по умолчанию « _ & «с красной строки» & vbCr .Range.InsertAfter «Зеленый курсив, размер 20» .Range(Start:=82, End:=107).Font.Italic = True .Range(Start:=82, End:=107).Font.Size = 20 .Range(Start:=82, End:=107).Font.ColorIndex = wdGreen End With Set myDocument = Nothing Set myWord = Nothing Exit Sub Instr: If Err.Description <> «» Then MsgBox «Произошла ошибка: « & Err.Description End If If Not myWord Is Nothing Then myWord.Quit Set myDocument = Nothing Set myWord = Nothing End If End Sub |
Вы можете запустить эти примеры в редакторе VBA Excel на своем компьютере и посмотреть результаты.
0 / 0 / 0 Регистрация: 05.10.2012 Сообщений: 3 |
|
1 |
|
05.10.2012, 18:42. Показов 72864. Ответов 64
Здравствуйте, ув. форумчане. Помогите начинающему. У меня есть экселевский файл с реквизитами клиентов. могу ли я сделать, чтобы по нажатию какой-нибудь кнопки(или по запуску макроса) создавался договор по определенному контрагенту из шаблона word?
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
05.10.2012, 18:42 |
64 |
5468 / 1148 / 50 Регистрация: 15.09.2012 Сообщений: 3,514 |
|
07.11.2012, 20:35 |
21 |
evavdeev, у вас дело в том (сам только что узнал), что при вставке текста в закладку, закладка удаляется. Есть 2 вида закладок:
Закладка в виде вертикальной черты получается, если при вставке закладки, нет выделения текста. При вставке данных в закладку в виде вертикальной черты — закладка не удаляется, а при вставке данных в закладку в виде квадратных скобок, закладка удаляется. Т.е. вывод какой? Вам надо сделать одного вида все закладки в шаблоне. Если закладки будут в виде вертикальной черты, то в коде VBA надо добавить команды по удалению закладок. Если закладки будут в виде квадратных скобок, то команды в коде VBA по удалению закладок не нужны.
2 |
evavdeev 1 / 1 / 0 Регистрация: 06.11.2012 Сообщений: 6 |
||||
08.11.2012, 09:08 |
22 |
|||
Разобрался… вроде все перед глазами, а сам не заметил…
Все работает. Большое спасибо за помощь! Добавлено через 4 минуты
Есть 2 вида закладок Полезная информация, но уже воспользовался прежним способом. Просто первоначально использовал неправильный синтаксис.
0 |
159 / 0 / 1 Регистрация: 18.06.2013 Сообщений: 2 |
||
18.06.2013, 17:33 |
23 |
|
Здравствуйте! Решилась вот к Вам обратиться с мольбой о помощи. я лишь начинаю программировать. В данный момент занимаюсь разработкой информационной системы для оценки рейтинга на VBA в Excel. По началу проблем не было,но сейчас возникла проблема с записью результатов с excel в документ word. впервые с этим столкнулась. Наткнулась на этот форум. скачала — Задачи-VBA-57.zip, попыталась разобраться. вроде работает,а под свою прогу не могу подстроить( меня бы немного направить в нужное русло,а там сама все сделаю. в папке ИС нужно открыть anketaа.xls. в редакторе VBA у меня много форм,не обращайте внимания,там остальное будет. пока используем первые три формы,которые во время запуска макроса переходят одна в другую. третья переходит в 29-ю, в ней нажимаем на кнопку Анализировать и попадаем на 30-ю форму, после нажатия на нее прога считает то,что мне нужно. до этого момента все нормально. дальше нужно вставить в документ Шаблон.doc в нужные места соответствующие значения,либо по этому шаблону новый документ создать и уже туда вставить значения нужные. Вложения
0 |
159 / 0 / 1 Регистрация: 18.06.2013 Сообщений: 2 |
|
19.06.2013, 09:04 |
24 |
Сообщение было отмечено как решение Решениеотвечать не надо. сама сделала)
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
19.06.2013, 09:47 |
25 |
Ошибочно
0 |
ihaustov |
|
21.06.2013, 17:05 |
26 |
Подскажите, пожалуйста, как сделать несколько документов на основе нескольких шаблонов из одной таблицы Excel по принципу, описанному выше? |
Hugoman 0 / 0 / 0 Регистрация: 05.12.2011 Сообщений: 8 |
||||
09.08.2013, 14:04 |
27 |
|||
Добрый день дорогие форумчане!
0 |
Hugo121 6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
||||
09.08.2013, 15:18 |
28 |
|||
?
0 |
Hugoman 0 / 0 / 0 Регистрация: 05.12.2011 Сообщений: 8 |
||||
09.08.2013, 15:28 |
29 |
|||
? Спасибо огромное за то что заметили, но это я ошибся когда переписывал код макроса на форум.
0 |
Hugo121 6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
||||||||
09.08.2013, 17:24 |
30 |
|||||||
Я думаю ошибка тут:
вот проверенный пример (код в Экселе):
Код берет из Excel данные ячеек и вставляет их в закладки в Word.
1 |
korvindeson 1261 / 147 / 32 Регистрация: 11.02.2011 Сообщений: 418 |
||||||||||||
09.08.2013, 18:05 |
31 |
|||||||||||
Сообщение было отмечено как решение РешениеЕщё вариант через HTML. Вот пример если заявления клипать
Вот, таким образом на мой вкус куда легче из экселя документы вертать потоком. Только если в таком варианте оставить, то при редактировании файлов и сохранении появляются папки с хтмл информацией, которые некоторых пугают Поэтому можно ещё вот такую функцию пользонуть, чтоб ворд под себя перекодировал.
Если брать первый пример, то можно пользовать как
Если с ненужным лезу, ногами не бить
1 |
1 / 1 / 0 Регистрация: 21.10.2012 Сообщений: 58 |
|
12.08.2013, 14:24 |
32 |
А что означают знаки доллара и процента в Вашем коде программы?
0 |
Модератор 34709 / 19230 / 4040 Регистрация: 12.02.2012 Сообщений: 32,197 Записей в блоге: 13 |
|
12.08.2013, 14:40 |
33 |
$ — значит переменная имеет тип String; % — соотв. Integer
1 |
Hugoman 0 / 0 / 0 Регистрация: 05.12.2011 Сообщений: 8 |
||||||||||||
12.08.2013, 15:20 |
34 |
|||||||||||
Ещё вариант через HTML. Вот пример если заявления клипать
Вот, таким образом на мой вкус куда легче из экселя документы вертать потоком. Только если в таком варианте оставить, то при редактировании файлов и сохранении появляются папки с хтмл информацией, которые некоторых пугают Поэтому можно ещё вот такую функцию пользонуть, чтоб ворд под себя перекодировал.
Если брать первый пример, то можно пользовать как
Если с ненужным лезу, ногами не бить А второй вариант, это я как понимаю на экспорт из exel в ворд? Если так, то можно в ваш макрос внедрить, экспорт из Exel определенного сегмента и вставка в определенное место вордовского документа!
0 |
1261 / 147 / 32 Регистрация: 11.02.2011 Сообщений: 418 |
|
12.08.2013, 17:02 |
35 |
Ниже, это не второй вариант. Просто открываем вордом сделаный вверху файл и пересохраняем вордом, чтоб он сохранялся по принципу doc а не html документов. Не обязательная штука, просто иначе будут папки появляться при изменении/сохранении документа
1 |
0 / 0 / 0 Регистрация: 21.08.2013 Сообщений: 5 |
|
21.08.2013, 12:22 |
36 |
Вот доработанный код. Чтобы выбрать строки для генерации, нужно дважды щелкнуть мышью в пятой колонке нужной строки (см.) А потом — как и раньше — «Пуск» Здравствуйте, Борис (Catstail). Воспользовавшись и немного видоизменив под свои нужды макрос в Вашем файле «Задачи-VBA-57a.xls» — получил в итоге рабочую форму для автозаполнения договоров в MS Word 2003, НО..столкнулся с непреодолимым препятствием в виде полностью разрушенного (включая таблицы) формата итогового документа. Плюс, не имея достаточных навыков работы в VBA, не могу сообразить, как реализовать в одном макросе ещё и заполнение табличных ячеек в вордовском документе данными из соответствующих ячеек файла эксель, поскольку Ваш макрос разработан для формирования договоров из данных, расположенных в ОДНУ СТРОКУ, а мне необходимо, помимо текста договора, автозаполнение таблицы, т.е. нескольких строк (данные столбцов: Q, R, S, T нужно как-то зациклить, допустим, до 26-й строки и поместить в таблицу ворд). Не могли бы Вы помочь мне разобраться с этой задачей. Файлы экселевского исходника и вордовского шаблона — прилагаю. Заранее благодарен.
0 |
Модератор 34709 / 19230 / 4040 Регистрация: 12.02.2012 Сообщений: 32,197 Записей в блоге: 13 |
|
21.08.2013, 17:54 |
37 |
Nosce te ipsum, почему рушится структура документа? Этого быть не должно. Вашу посылку скачал, но не понял, где там мой код. Пишите мне в почту — будем общаться.
0 |
0 / 0 / 0 Регистрация: 21.08.2013 Сообщений: 5 |
|
21.08.2013, 21:06 |
38 |
Catstail, Добавлено через 4 минуты
Nosce te ipsum, почему рушится структура документа? Этого быть не должно. Вашу посылку скачал, но не понял, где там мой код. Пишите мне в почту — будем общаться. Ещё раз, здравствуйте, Борис. p.s. Написал Вам в Скайп, поскольку почту не нашёл. Добавлено через 7 минут
0 |
Модератор 34709 / 19230 / 4040 Регистрация: 12.02.2012 Сообщений: 32,197 Записей в блоге: 13 |
|
21.08.2013, 21:09 |
39 |
Хорошо, завтра я все детально рассмотрю.
0 |
Модератор 11342 / 4661 / 748 Регистрация: 07.08.2010 Сообщений: 13,508 Записей в блоге: 4 |
|
21.08.2013, 21:10 |
40 |
не тянет wdDoc.Range.Text = Replace$(wdDoc.Range.Text,
0 |
Александр спрашивает:
Как вставить (автоматически!) по всему документу в начале каждой строки один и тот же текст? Вручную это очень долго если документ много строк.
Можно воспользоваться следующим макросом для вставки некоего текста перед первым предложением каждого абзаца.
Sub insertBefore() 'Вставка текста из поля ввода перед каждым абзацем Dim par As Paragraph Dim Str As String Str = InputBox("Введите текст", "Ввод текста в начало каждого абзаца") 'Диалог с полем ввода текста For Each par In ActiveDocument.Paragraphs par.Range.insertBefore (Str & vbTab) 'Вставляем текст из поля ввода и добавляем табуляцию Next End Sub
Если вы не знаете, как подключить к документу и применить этот макрос, изучите следующие заметки с сайта:
Создание макроса из готового кода
Автоматическая запись макроса
-
March 21 2009, 23:37
- IT
- Работа
- Cancel
1. Установить куда-нибудь курсор;
2. Выбрать Вид->Макросы->Запись макроса;
3. Задать имя и сочетание клавиш или кнопку
4. Начать запись;
5. Выбрать Главная->Вставить->Специальная вставка->Неформатированный текст;
6. Закончить запись макроса;
//Можно проверить, что макрос точно не работает
7. Помянуть Microsoft плохим словом;
8. Открыть Вид->Макросы;
9. Выбрать нужный макрос->Изменить;
// Примерно такой:
Sub macros()
‘ macros Макрос
Selection.PasteAndFormat (wdPasteDefault)
End Sub
10. Открыть msdn и радостно обнаружить, что wdPasteDefault «Not supported» (как и что пишется в макросы – загадка);
11. Заменить wdPasteDefault на wdFormatPlainText;
// Вот так:
Sub macros()
‘ macros Макрос
Selection.PasteAndFormat (wdFormatPlainText)
End Sub
12. Сохранить.
Параллельно с этим обнаружить, что редактор Visual Basic помещает в буфер обмена содержимое в зависимости от текущей раскладки клавиатуры. Т.е. если хотите Copy — Paste русский текст, не забывайте выбирать русскую раскладку
Выполнение в Word повторяющейся задачи, требующей большого количества щелчков мыши или нажатий клавиш, каждый раз вызывает только раздражение. С помощью макроса можно объединить набор команд и заставить Word выполнять их по щелчку мыши или нажатию клавиши.
Включение макроса в Word 2010
Перейдите на вкладку ленты Разработчик. Если этой вкладки на вашей ленте нет, откройте окно Параметры Word и на вкладке Основные установите флажок на параметре Показывать вкладку «Разработчик» на ленте.
На вкладке “Разработчик” в группе команд “Код” нажмите кнопку “Начать запись”. Откроется диалоговое окно Запись макроса.
Для примера сделаем простую запись макроса, которая будет выполнять вставку текста в то место, где будет стоять курсор.
Запускаем запись макроса и в диалоговом окне пишем его название и описание, а так же выбираем доступ.
Нажмем ОК и начнется запись макроса.
Напечатаем текст и добавим ему цвет.
После чего нажмем “Остановить макрос”.
Для запуска макроса нужно нажать кнопку “Макросы” или комбинацию клавиш “Alt + F8”, так же макросу можно задать в личную комбинацию клавиш или вывести кнопку в меню.
Запустив окно “Макрос” выбираем нужный нам макрос и нажимаем выполнить, после чего он вставить в нужное нам место наш текст.
Создание макроса с помощью редактора Visual Basic for Applications (VBA).
Создадим простейший макрос, который будет позволять щелкать по гиперссылке в документе Word без нажатой клавиши Ctrl
Макросы для Word пишутся на языке программирования Visual Basic for Applications (VBA).
Макросы создаются в компоненте Word, который большинство пользователей никогда не видят, — в редакторе Visual Basic (VBE). Открыть редактор Visual Basic можно одним из указанных ниже способов.
- Нажмите сочетание клавиш ALT + F11
- Нажмите кнопку Visual Basic на вкладке Разработчик. Для этого откройте вкладку Файл и нажмите кнопку Параметры. В диалоговом окне Параметры Word нажмите кнопку Настройка ленты. В правой части диалогового окна выберите вкладку Разработчик. Нажмите кнопку ОК, чтобы вернуться к документу, а затем нажмите на вкладке Разработчик кнопку Visual Basic.
- Добавление команды Visual Basic на панель быстрого доступа.
Перед тем как приступить к работе с редактором Visual Basic, выберите в меню Сервис пункт Параметры. В диалоговом окне Параметры установите на вкладке Редактор все флажки.
В левом верхнем углу редактора Visual Basic расположено Окно проекта. В нем отображаются все файлы, открытые в Word в настоящий момент. Там должны отображаться файлы Normal (соответствующий шаблону Normal.dotm) и TheDocument (только что созданный файл).
На приведенном ниже рисунке показан проект TheDocument в окне проекта редактора Visual Basic.
В файле макросы хранятся в виде модулей. Чтобы добавить в файл модуль, выберите в окне проекта файл TheDocument. В меню Вставка выберите пункт Модуль. После добавлении модуля в файл этот модуль появится в окне проекта и в расположенном под ним окне свойств. В окне свойств модуль можно переименовать или оставить имя по умолчанию Module1.
Написание макроса
Большая белая область в правой части редактора Visual Basic предназначена для написания кода макроса. Если она не отображается, выберите в меню Вид пункт Код, чтобы вывести окно кода. Приложение Word автоматически вставит в начало кода оператор Option Explicit. Не удаляйте его.
Нам нужен макрос для переключения между двумя способами перехода по гиперссылке в Word. Он будет работать так же, как и другие кнопки, предназначенные для переключения между значениями параметра в Word. Кнопка Полужирный на вкладке «Главная», например, выделяет текст полужирным шрифтом, если он не был выделен, и отменяет полужирное начертание в противном случае.
Скопируйте и вставьте через буфер обмена приведенный ниже пример кода макроса в окно кода.
Sub ToggleHyperlinkCtrlClick()
Options.CtrlClickHyperlinkToOpen = Not Options.CtrlClickHyperlinkToOpen
End Sub
Это короткий макрос ToggleHyperlinkCtrlClick, состоящий только из одной строки кода. Эта строка означает «Изменить текущее значение параметра Word, определяющего необходимость использования сочетания CTRL + щелчок для перехода по гиперссылке, на противоположное (Not).
Тестирование макроса
Чтобы протестировать макрос, выполните указанные ниже действия.
- Разместите окна Word и редактора Visual Basic рядом друг с другом.
- Щелкните главное окно Word. Введите в документ http://google.com
- В редакторе Visual Basic щелкните в любом месте макроса. Чтобы запустить макрос, выберите в меню Выполнить команду Выполнить процедуру/форму пользователя или нажмите клавишу F5.
- Значение параметра, определяющего способ перехода по гиперссылке, изменится. Наведите указатель мыши на гиперссылку в главном окне Word и убедитесь, что подсказка изменилась.
- Чтобы переключить значение, запустите макрос повторно.
Макрос также можно запустить непосредственно в приложении Word. На вкладке Вид в группе Макросы нажмите кнопку Макросы. Откроется диалоговое окно Макрос, где в списке макросов будет и макрос ToggleHyperlinkCtrlClick. Чтобы запустить ваш макрос, щелкните его имя и нажмите кнопку Выполнить.
Создание на панели быстрого доступа кнопки для запуска макроса
Чтобы запускать макрос одним щелчком мыши, можно добавить кнопку на панель быстрого доступа. Для этого выполните указанные ниже действия.
Создание кнопки на панели быстрого доступа
- Щелкните панель быстрого доступа правой кнопкой мыши и выберите в контекстном меню команду Настройка панели быстрого доступа. В разделе Настройка панели быстрого доступа выберите в списке Выбрать команды из пункт Макросы. В списке «Настройка панели быстрого доступа» выберите файл MyWordTools.dotm. (Это необходимо, чтобы приложение Word сохранило кнопку на панели быстрого доступа в файле MyWordTools.dotm. Если этого не сделать, при копировании файла на другой компьютер кнопка отображаться не будет.) Выберите макрос ToggleHyperlinkCtrlClick и нажмите кнопку Добавить.
- Нажмите кнопку Изменить, чтобы выбрать символ и изменить имя на ToggleHyperlinkCtrlClick.
- Теперь макрос можно запустить в любой момент, нажав кнопку на панели быстрого доступа.
Макросы Word могут быть длинными, сложными и многофункциональными. Например, можно написать макрос для обращения к внешней базе данных, выполнения с полученными данными определенных вычислений и возврата результатов в Word. Также можно написать макрос Word для взаимодействия с Excel, PowerPoint или Outlook. В некоторых случаях и простые макросы могут оказаться полезными, позволяя сэкономить время.
Для форматирования текста больше подходят стили, чем макросы. Для изменения макета документа лучше создать новый шаблон. Кроме того, для выполнения поставленной задачи уже может существовать встроенная команда, которую можно добавить на панель быстрого доступа (при настройке панели быстрого доступа выберите в списке Выбрать команды из: пункт Все команды).
Как назначить сочетания клавиш для макросов
- Откройте диалоговое окно Параметры Word.
- Перейдите на закладку Настройка ленты и выбираем в командах: Макросы.
- Потом выбираем наш макрос и с низу жмем сочетание клавиш – настройки.
- В диалоговом окне настройки клавиатуры выбираем в категории макросы и в окне макросы выбираем нужный нам макрос.
- Щелкаем в новое сочетание клавиш и жмем на клавиатуре нужную нам комбинацию.
- Жмем назначить и ок
Примеры кодов:
Удаление лишних пробелов в тексте без использования диалогового окна “Найти и заменить”
Sub ReplaceMultiSpaces()
Dim oChar As Range
For Each oChar In ActiveDocument.Characters
If oChar.Text = » » Then
While oChar.Next(wdCharacter).Text = » «
oChar.Next(wdCharacter).Delete
Wend
End If
Next
End Sub
Расположение двух открытых документов Word рядом
Sub ArrangeDocWindows()
‘ ArrangeDocWindows Macro
‘ Arranges two document windows side by side vertically
Dim iMiddle As Integer
Dim iClientWid As Integer
Dim iClientHi As Integer
Dim iWin1 As Integer
Dim iWin2 As Integer
Dim sPrompt As String
Dim sWins As String
Dim i As Integer
iClientWid = Application.Width — 9
iMiddle = Fix((iClientWid) / 2)
iClientHi = Application.Height — 94
iWin1 = 1
iWin2 = 2
If Application.Windows.Count > 2 Then
For i = 1 To Application.Windows.Count
sPrompt = sPrompt & CStr(i) & » — » & Application.Windows(i).Caption & vbLf
Next
sWins = InputBox(«Enter numbers of windows to arrange separated by space.» & vbLf & sPrompt, _
«Choose windows», «1 2»)
If sWins = «» Then
Exit Sub
End If
iWin1 = CInt(Left(sWins, InStr(sWins, » «) — 1))
iWin2 = CInt(Mid(sWins, InStr(sWins, » «) + 1))
End If
Application.Windows(iWin1).Activate
Application.Windows(iWin1).WindowState = wdWindowStateNormal
With ActiveWindow
.Left = 0
.Top = 0
.Height = iClientHi
.Width = iMiddle
End With
Application.Windows(iWin2).Activate
Application.Windows(iWin2).WindowState = wdWindowStateNormal
With ActiveWindow
.Left = iMiddle
.Top = 0
.Height = iClientHi
.Width = iClientWid — iMiddle
End With
End Sub
Обратите внимание, что если у вас будет открыто только одно окно, то после нажатия этой кнопки может появиться окно с сообщением редактора кода Visual Basic об ошибке. Закройте его нажав на кнопку End. А в следующий раз будьте внимательны.
Преобразование гиперссылки в документе Word в обычный текст
Sub RemoveHyperlinks()
While ActiveDocument.Hyperlinks.Count > 0
ActiveDocument.Hyperlinks(1).Delete
Wend
Application.Options.AutoFormatAsYouTypeReplaceHyperlinks = False
End Sub
Изменения цвета заглавных букв в тексте
Sub colorAllBig()
Dim fChar As Range
Dim seltext As Range
Dim i As Long
Set seltext = Selection.Range
If Selection.Type = wdSelectionIP Then
MsgBox «Выделите текст»
Else
For Each fChar In seltext.Words
For i = 1 To fChar.Characters.Count
If fChar.Characters(i).Case = wdUpperCase Then
fChar.Characters(i).Font.Color = wdColorRed
Else
fChar.Characters(i).Font.Color = wdColorBlack
End If
Next i
Next fChar
End If
End Sub