Макрос для word миф

Содержание

  • VBA PDF (бесплатные загрузки)
  • Примеры Word VBA «Шпаргалка»
  • Учебное пособие по макросам Word VBA
  • Пример простого макроса Word
  • Объект документа Word
  • Документы
  • Диапазон, выделение, абзацы
  • Примеры макросов Word

Добро пожаловать в наше мега-руководство по Word VBA / макросам!

Эта страница содержит:

    1. Учебное пособие по Word VBA в формате PDF (бесплатная загрузка)
    2. Word VBA «Шпаргалка», содержащая список наиболее часто используемых фрагментов кода Word VBA.
    3. Полное руководство по Word VBA / Macro.
    4. Список всех наших руководств по макросам Word VBA с возможностью поиска

Возможно, вас заинтересует наше интерактивное руководство по VBA для Excel. Хотя некоторые из примеров / упражнений относятся к Excel VBA, большая часть содержимого является общим для всех VBA, и вам может быть полезно изучить такие концепции, как If, Loops, MessageBoxes и т. Д.

VBA PDF (бесплатные загрузки)

Загрузите наше бесплатное руководство по Microsoft Word VBA! Или учебники VBA для других программ Office!

Скачать

Ниже вы найдете простые примеры кода VBA для работы с Microsoft Word.

Выбрать / перейти к

ОписаниеКод VBABackspaceSelection.TypeBackspaceВыбрать весь документSelection.HomeKey Unit: = wdStory
Selection.ExtendКопироватьSelection.CopyУдалитьSelection.Delete Unit: = wdCharacter, Count: = 1Вставить послеSelection.InsertAfter «текст»Начало строкиSelection.HomeKey Unit: = wdLineКонец линииSelection.EndKey Unit: = wdLineВставитьSelection.PasteВыбрать всеSelection.WholeStoryВыбрать всю строкуSelection.EndKey Unit: = wdLine, Extend: = wdExtendВверх по абзацуSelection.MoveUp Unit: = wdParagraph, Count: = 1Переместить вправо на один символSelection.MoveRight Unit: = wdCharacter, Count: = 1Переместить вправо на одну ячейку в таблицеSelection.MoveRight Unit: = wdCellПерейти к началу документаSelection.HomeKey Unit: = wdStoryПерейти в конец документаSelection.EndKey Unit: = wdStoryПерейти на страницу 1Selection.GoTo What: = wdGoToPage, Which: = wdGoToNext, Name: = ”1 ″Перейти к началу страницыSelection.GoTo What: = wdGoToBookmark, Name: = ” Page”
Selection.MoveLeft Unit: = wdCharacter, Count: = 1

Return to Top

Закладки

ОписаниеКод VBAДобавлятьС ActiveDocument.Bookmarks
.Add Range: = Selection.Range, Name: = «Name».
.DefaultSorting = wdSortByName
.ShowHidden = Ложь
Конец сСчитатьDim n as Integer
n = ActiveDocument.Bookmarks.CountУдалитьActiveDocument.Bookmarks («Имя закладки»). УдалитьСуществуют?Если ActiveDocument.Bookmarks.Exists («BookmarkName») = True, то
‘Сделай что-нибудь
Конец, еслиПерейти кSelection.GoTo What: = wdGoToBookmark, Name: = ”BookmarkName”ВыбиратьActiveDocument.Bookmarks («Имя закладки»). ВыберитеЗаменить текстSelection.GoTo What: = wdGoToBookmark, Name: = ”BookmarkName”
Selection.Delete Unit: = wdCharacter, Count: = 1
Selection.InsertAfter «Новый текст»
ActiveDocument.Bookmarks.Add Range: = Selection.Range, _
Name: = ”BookmarkName”

Return to Top

Документ

ОписаниеКод VBAАктивироватьДокументы («Example.doc»). АктивироватьДобавить в переменнуюDim doc As Document
Установить doc = Documents.AddДобавлятьDocuments.AddДобавить (из другого документа)Documents.Add Template: = ”C: Forms FormDoc.doc”, _
NewTemplate: = FalseЗакрыватьДокументы («Example.doc»). ЗакрытьЗакрыть — сохранить измененияДокументы («Example.doc»). Закройте SaveChanges: = wdSaveChangesЗакрыть — не сохранятьДокументы («Example.doc»). Закройте SaveChanges: = wdDoNotSaveChanges.Закрыть — запрос на сохранениеДокументы («Example.doc»). Закройте SaveChanges: = wdPromptToSaveChanges.

Return to Top

Столбцы

ОписаниеКод VBAСохранить какДокументы («Example.doc»). SaveAs («C: Example Example.doc»)СохранитьДокументы («Example.doc»). СохранитьЗащищатьДокументы («Example.doc»). Защитить пароль: = «пароль»Снять защитуДокументы («Example.doc»). Снять пароль: = «пароль»Число страницDim varNumberPages как вариант
varNumberPages = _
ActiveDocument.Content.Information (wdActiveEndAdjustedPageNumber)РаспечататьДокументы («Example.doc»). Распечатать

Return to Top

Устали искать примеры кода VBA? Попробуйте AutoMacro!

Шрифт

ОписаниеКод VBAРазмерSelection.Font.Size = 12ЖирныйSelection.Font.Bold = TrueКурсивSelection.Font.Italic = TrueПодчеркиваниеSelection.Font.Underline = wdUnderlineSingleВсе заглавные буквыSelection.Font.AllCaps = TrueЦветSelection.Font.TextColor = vbRedИмяSelection.Font.Name = «Абади»Нижний индексSelection.Font.Subscript = TrueSuperScriptSelection.Font.Superscript = TrueЦвет выделенияSelection.Range.HighlightColorIndex = wdYellowСтильSelection.Style = ActiveDocument.Styles («Нормальный»)

Return to Top

Вставлять

ОписаниеКод VBAВставить автотекстSelection.TypeText Текст: = ”a3 ″
Selection.Range.InsertAutoTextВставить код датыВставить файлSelection.InsertFile («C: Docs Something.doc»)Вставить разрыв страницыSelection.InsertBreak Тип: = wdPageBreakВставить символ абзацаSelection.TypeText Text: = Chr $ (182)Вставить вкладкуSelection.TypeText Текст: = vbTabВставить текстSelection.TypeText Text: = «Любой текст»Вставить абзац типаSelection.TypeParagraphВставить абзацSelection.InsertParagraph

Return to Top

Петли

ОписаниеКод VBAСделать до конца документаСделать до ActiveDocument.Bookmarks (« Sel») = ActiveDocument.Bookmarks (« EndOfDoc»)
‘Сделай что-нибудь
SubДля каждого документа в ДокументахDim doc As Document
Для каждого документа в документах
‘Сделай что-нибудь
Следующий документЦикл по абзацамПодпункты через абзацы
Dim i As Long, iParCount As Long
iParCount = ActiveDocument.Paragraphs.CountFori = 1 На iParCount
ActiveDocument.Paragraphs (i) .Alignment = wdAlignParagraphLeft
Далее я

Return to Top

Пункт

ОписаниеКод VBAKeepLinesTogetherSelection.ParagraphFormat.KeepTogether = TrueKeepWithNextSelection.ParagraphFormat.KeepWithNext = ИстинаПробел послеSelection.ParagraphFormat.SpaceAfter = 12Пространство доSelection.ParagraphFormat.SpaceBefore = 0Выровнять по центруSelection.ParagraphFormat.Alignment = wdAlignParagraphCenterВыровнять по правому краюSelection.ParagraphFormat.Alignment = wdAlignParagraphRightВыровнять по левому краюSelection.ParagraphFormat.Alignment = wdAlignParagraphLeftЛевый отступSelection.ParagraphFormat.LeftIndent = InchesToPoints (3,75)Правый отступSelection.ParagraphFormat.RightIndent = InchesToPoints (1)Межстрочный интервалС Selection.ParagraphFormat
.LineSpacingRule = wdLineSpaceExactly
.LineSpacing = 12
Конец сПеребрать все абзацыПодпункты через абзацы
Dim i As Long, iParCount As Long
iParCount = ActiveDocument.Paragraphs.CountFori = 1 На iParCount
ActiveDocument.Paragraphs (i) .Alignment = wdAlignParagraphLeft
Далее я

Return to Top

Учебное пособие по макросам Word VBA

Это руководство по использованию VBA с Microsoft Word. Это руководство научит вас писать простой макрос и взаимодействовать с документами, диапазонами, выделениями и абзацами.

Примечание. Если вы новичок в Macros / VBA, вам также может быть полезна эта статья: Как писать макросы VBA с нуля.

VBA — это язык программирования, используемый для автоматизации программ Microsoft Office, включая Word, Excel, Outlook, PowerPoint и Access.

Макросы представляют собой блоки кода VBA, которые выполняют определенные задачи.

Когда ты Записать макрос, Word запишет код VBA в макрос, что позволит вам повторять ваши действия. Вы можете увидеть список всех доступных макросов из Просмотр> Макросы.

После записи макроса вы сможете редактировать макрос из списка макросов:

Когда вы нажимаете Редактировать, вы открываете Редактор VBA. Используя редактор VBA, вы можете редактировать записанные макросы или писать макрос Word с нуля. Для доступа к редактору VBA используйте ярлык ALT + F11 или щелкните Visual Basic от Лента разработчика.

Пример простого макроса Word

Это простой пример макроса Word VBA. Он выполняет следующие задачи:

  • Открывает документ Word
  • Записывает в документ
  • Закрывает и сохраняет документ Word.
123456789101112131415 Sub WordMacroExample ()’Открыть документ и назначить переменнойDim oDoc как документУстановите oDoc = Documents.Open («c: Users something NewDocument.docx»).’Написать в документSelection.TypeText «www.automateexcel.com»Selection.TypeParagraph’Сохранить и закрыть документoDoc.SaveoDoc.CloseКонец подписки

Основы работы с макросами Word

Весь код VBA должен храниться в подобных процедурах. Чтобы создать процедуру в VBA, введите «Sub WordMacroExample» (где «WordMacroExample» — желаемое имя макроса) и нажмите ВХОДИТЬ. VBA автоматически добавит круглые скобки и End Sub.

Объект документа Word

При взаимодействии с Microsoft Word в VBA вы часто будете ссылаться на Word «Объекты». Наиболее распространенные объекты:

Объект приложения — сам Microsoft Word

Объект документа — документ Word

Объект диапазона — Часть документа Word

Объект выделения — Выбранный диапазон или положение курсора.

заявка

Приложение — это объект «верхнего уровня». Через него можно получить доступ ко всем остальным объектам Word.

Помимо доступа к другим объектам Word, можно применить настройки «уровня приложения»:

1 Application.Options.AllowDragAndDrop = True

Это пример доступа к «Выборке» в «Windows (1)» в Приложении:

1 Application.Windows (1) .Selection.Characters.Count

Однако к наиболее распространенным объектам Word можно получить доступ напрямую, без ввода полной иерархии. Поэтому вместо этого вы можете (и должны) просто ввести:

1 Selection.Characters.Count

Документы

ActiveDocument

Часто у вас есть два или более документов, открытых в Word, и вам нужно указать, с каким конкретным документом Word следует взаимодействовать. Один из способов указать, какой документ использовать ActiveDocument. Например:

1 ActiveDocument.PrintOut

… Напечатал бы ActiveDocument. ActiveDocument — это документ в Word, который «имеет фокус»

Чтобы переключить ActiveDocument, используйте команду Activate:

1 Документы («Example.docx»). Активировать

Этот документ

Вместо использования ActiveDocument для ссылки на активный документ вы можете использовать ThisDocument для ссылки на документ, в котором хранится макрос. Этот документ никогда не изменится.

Переменные документа

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

Вместо этого вы можете использовать переменные документа.

Этот макрос назначит ActiveDocument переменной, а затем распечатает документ, используя переменную:

12345 Sub VarExample ()Dim oDoc как документУстановите oDoc = ActiveDocumentoDoc.PrintOutКонец подписки

Документ Методы

Открыть документ

Чтобы открыть документ Word:

1 Documents.Open «c: Users SomeOne Desktop Test PM.docx»

Мы рекомендуем всегда назначать документ переменной при его открытии:

12 Dim oDoc как документУстановите oDoc = Documents.Open («c: Users SomeOne Desktop Test PM.docx»).

Создать новый документ

Чтобы создать новый документ Word:

Мы можем указать Word создать новый документ на основе некоторого шаблона:

1 Documents.Add Template: = «C: Program Files Microsoft Office Templates MyTemplate.dotx»

Как всегда, присвоение документа переменной при создании или открытии помогает избавить от серьезных проблем:

12 Dim oDoc как документУстановите oDoc = Documents.Add (Template: = «C: Program Files Microsoft Office Templates MyTemplate.dotx»)

Сохранить документ

Чтобы сохранить документ:

или Сохранить как:

1 ActiveDocument.SaveAs FileName: = c: Users SomeOne Desktop test2.docx «, FileFormat: = wdFormatDocument

Закрыть документ

Чтобы закрыть документ и сохранить изменения:

1 ActiveDocument.Close wdSaveChanges

или без сохранения изменений:

1 ActiveDocument.Close wdDoNotSaveChanges

Распечатать документ

Это напечатает активный документ:

1 ActiveDocument.PrintOut

Диапазон, выделение, абзацы

Диапазон а также Выбор являются, вероятно, наиболее важными объектами в Word VBA и, безусловно, наиболее часто используемыми.

Диапазон относится к некоторой части документа, обычно, но не обязательно, к тексту.

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

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

Диапазон

Диапазон может быть любой частью документа, включая весь документ:

12 Dim oRange As RangeУстановите oRange = ActiveDocument.Content

или он может быть маленьким, как один символ.

Другой пример, этот диапазон будет относиться к первому слову в документе:

12 Dim oRange As RangeУстановите oRange = ActiveDocument.Range.Words (1)

Обычно вам нужно получить диапазон, который относится к определенной части документа, а затем изменить его.

В следующем примере мы выделим первое слово второго абзаца жирным шрифтом:

123 Dim oRange As RangeУстановите oRange = ActiveDocument.Paragraphs (2) .Range.Words (1)oRange.Bold = True

Установить текст диапазона

Чтобы установить текстовое значение диапазона:

123 Dim oRange As RangeУстановите oRange = ActiveDocument.Paragraphs (2) .Range.Words (1)oRange.Text = «Привет»

(Совет: обратите внимание на пробел после «Hello». Поскольку слово «объект» включает пробел после слова, просто «hello» мы получим «Hellonext word»)

С диапазонами можно делать сотни вещей. Всего несколько примеров (предполагается, что вы уже сделали объектную переменную апельсин относится к интересующему диапазону):

Изменить шрифт

1 oRange.Font.Name = «Arial»

Отображение в окне сообщения количества символов в определенном диапазоне

1 MsgBox oRange.Characters.Count

Вставьте текст перед ним

1 oRange.InsertBefore «это вставленный текст»

Добавить сноску к диапазону

12 ActiveDocument.Footnotes.Add Диапазон: = oRange, _Text: = «Подробнее читайте на easyexcel.net.»

Скопируйте в буфер обмена

1234 oRange.CopyЧасто вам нужно перейти к конкретному диапазону. Итак, вы можете начать, начать и закончитьoRange.Start = 5oRange.End = 50

После приведенного выше кода oRange будет относиться к тексту, начинающемуся с пятого и заканчивающемуся 50-м символом в документе.

Выбор

Выбор используется даже шире, чем Диапазон, потому что с ним легче работать Выборы чем Диапазоны, ЕСЛИ ваш макрос взаимодействует ТОЛЬКО с ActiveDocument.

Сначала выберите желаемую часть вашего документа. Например, выберите второй абзац в активном документе:

1 ActiveDocument.Paragraphs (2) .Range.Select

Затем вы можете использовать объект выбора для ввода текста:

1 Selection.TypeText «Какой-то текст»

Мы можем ввести несколько абзацев ниже «Некоторый текст»:

12 Selection.TypeText «Какой-то текст»Selection.TypeParagraph

Часто необходимо знать, выделен ли какой-то текст или у нас есть только точка вставки:

12345 Если Selection.Type wdSelectionIP ТогдаSelection.Font.Bold = TrueЕщеMsgBox «Вам нужно выделить текст».Конец, если

При работе с объектом Selection мы хотим поместить точку вставки в определенное место и запускать команды, начиная с этой точки.

Начало документа:

1 Selection.HomeKey Unit: = wdStory, Extend: = wdMove

Начало текущей строки:

1 Selection.HomeKey Unit: = wdLine, Extend: = wdMove

Параметр Extend wdMove перемещает точку вставки. Вместо этого вы можете использовать wdExtend, который выделит весь текст между текущей точкой вставки.

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

Переместить выделение

Самый полезный метод изменения положения точки вставки — «Перемещение». Чтобы переместить выделение на два символа вперед:

1 Selection.Move Unit: = wdCharacter, Count: = 2

чтобы переместить его назад, используйте отрицательное число для параметра Count:

1 Selection.Move Unit: = wdCharacter, Count: = — 2

Параметр единицы измерения может быть wdCharacter, wdWord, wdLine или другим (используйте справку Word VBA, чтобы увидеть другие).

Чтобы вместо этого переместить слова:

1 Selection.Move unit: = wdWord, Count: = 2

С выделением легче работать (по сравнению с диапазонами), потому что он похож на робота, использующего Word, имитирующего человека. Где находится точка вставки — какое-то действие произойдет. Но это означает, что вы должны позаботиться о том, где находится точка вставки! Это непросто после многих шагов в коде. В противном случае Word изменит текст в нежелательном месте.

Если вам нужно какое-то свойство или метод, недоступный в объекте Selection, вы всегда можете легко получить диапазон, связанный с выбором:

1 Установите oRange = Selection.Range.

СОВЕТ: Использование Выбор часто проще, чем использование диапазонов, но также и медленнее (важно, когда вы имеете дело с большими документами)

Абзацы

Вы не можете напрямую использовать объект Paragraphs для изменения текста:

1 ActiveDocument.Paragraphs (1) .Text = «Нет, это не сработает»

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

1 ActiveDocument.Paragraphs (1) .Range.Text = «Теперь работает :)»

Но вы можете напрямую изменить его стиль:

1 ActiveDocument.Paragraphs (1) .Style = «Нормальный»

или измените форматирование на уровне абзаца:

1 ActiveDocument.Paragraphs (1) .LeftIndent = 10

или, может быть, вы хотите сохранить этот абзац на одной строке со следующим абзацем:

1 ActiveDocument.Paragraphs (1) .KeepWithNext = True

Сделайте абзац по центру:

1 ActiveDocument.Paragraphs (1) .Alignment = wdAlignParagraphCenter

ОЧЕНЬ полезно назначить конкретный абзац объектной переменной. Если мы присвоим переменной конкретный абзац, нам не нужно беспокоиться, станет ли первый абзац вторым, потому что мы вставили перед ним один абзац:

12 dim oPara как абзацУстановите oPara = Selection.Paragraphs (1) ‘здесь мы присваиваем первый абзац текущего выделения переменной

Вот пример, в котором мы вставляем абзац над первым абзацем, но мы все еще можем ссылаться на старый первый абзац, потому что он был назначен переменной:

1234567 Sub ParagraphExample ()Dim oPara как абзацУстановить oPara = ActiveDocument.Paragraphs (1)MsgBox oPara.Range.TextoPara.Range.InsertParagraphBefore ‘Вставить абзацMsgBox oPara.Range.TextКонец подписки

Объект абзаца очень часто используется в циклах:

123456789101112 Sub LoopThroughParagraphs ()Dim oPara как абзацДля каждого параметра в ActiveDocument.Paragraphs«Сделай что-нибудь с этим. Мы просто покажем’текст абзаца, если его стиль — «Заголовок 4″Если oPara.Style = «Заголовок 4», тоMsgBox oPara.Range.TextКонец, еслиДалее oParaКонец подписки

Word VBA Tutorial Заключение

В этом руководстве были рассмотрены основы Word VBA. Если вы новичок в VBA, вам также следует ознакомиться с нашим общим руководством по VBA, чтобы узнать больше о переменных, циклах, окнах сообщений, настройках, условной логике и многом другом.

Примеры макросов Word

Примеры макросов Word
Шаблоны
Добавить новые документы
Подсчет слов в выделенном фрагменте
Текстовые поля
Сохранить как PDF
Закладки
Таблицы
Найти, найти и заменить
Открытые документы

Word VBA: часто задаваемые вопросы

Что такое макрос Word?

Макрос — это общий термин, обозначающий набор инструкций по программированию, которые автоматизируют задачи. Макросы Word автоматизируют задачи в Word с помощью языка программирования VBA.

Есть ли в слове VBA?

Да, в Microsoft Word есть редактор VBA. Доступ к нему можно получить, нажав клавиши ALT + F11 или перейдя в раздел «Разработчик»> «Visual Basic».

Как использовать VBA в Word?

1. Откройте редактор VBA (ALT + F11 или Разработчик> Visual Basic).
2. Выберите «Вставить»> «Модуль», чтобы создать модуль кода.
3. Введите «Sub HelloWorld» и нажмите Enter.
4. Между строками «Sub HelloWorld» и «End Sub» введите «MsgBox« Hello World! »
5. Вы создали макрос!
6. Теперь нажмите «F5», чтобы запустить макрос.

This post is the second in a series about controlling other applications from Excel using VBA. In the first part we looked at the basics of how to reference other applications using Early Binding or Late Binding. In this post, we will look at how we can automate Word from Excel even though we don’t know any VBA code for Word… yet. The process we will use for this is as follows:

  1. Enable the Word Developer menu
  2. Record a Word macro
  3. Add the code to Excel VBA and amend
  4. Record macros in Excel if necessary
  5. Repeat the previous steps until macro complete

I am not an Excel VBA expert (I’m more of an Excel VBA tinkerer), and I am certainly not a Word VBA expert. The process I am about to show you may not create the most efficient code, but I know this process works, because I have used it myself to automate lots tasks using Microsoft Word.

Enable the Word Developer menu

If you have enabled the Excel Developer menu it is the same process in Word.

In Word: File -> Options -> Customize Ribbon

Then tick the Developer Ribbon option, OK.

Enable Word Developer Tab

Record a Word Macro

The key to the success of this method is taking small sections of code and building up a complex macro bit by bit. Using the Word Macro Recorder is again, similar to the Excel Macro recorder.

Click on: Developer -> Record Macro

Word VBA Record Macro

For the example in this post, we will create a macro which will open a new Word document, then copy a chart from Excel and paste it into that Word document. We will tackle this one stage at a time. Firstly, lets create the macro to open a new word document.

Click – Developer -> Record Macro. The Record Macro window will open.

Word Record Macro Window

Make a note of the “Store macro in” option, as we will need to know where to find the recorded code later. Normal.dotm is fine for now. Click OK – the Macro Recorder is now running.

Open a new Word Document – File -> New -> Blank Document

Stop the Macro from recording – Developer -> Stop Recording

Word VBA Stop Recording

We can now view the code for opening a new Word Document in the Visual Basic Editor. Click: Developer -> Visual Basic.

Word Visual Basic Editor

Find the location of your recorded code in the Visual Basic Editor. In this example: Normal -> Modules -> NewMacros.

Automate Word from Excel

Your code should look like the following. It may be slightly different, but not significantly.

Sub Macro1()
'
' Macro1 Macro
'
'
    Documents.Add Template:="Normal", NewTemplate:=False, DocumentType:=0
    Windows("Document1").Activate
    Windows("Document2").Activate
End Sub

Add the code to Excel VBA and amend

Let’s head back to the Excel VBA Editor and use the Early Binding method to control to Microsoft Word. In the Visual Basic Editor click Tools -> References select Microsoft Word x.xx Object Library. Then click OK.

VBA Word Object Library

As we are using Early Binding we need to declare the Application as a variable as follows:

Dim WordApp As Word.Application
Set WordApp = New Word.Application

Now copy and paste the code from the Word VBA Editor into the Excel VBA Editor.

The Word VBA code started with Documents.Add, all we have to do is add our application variable to the front of that line of code. Now becomes WordApp.Documents.Add . . .

Often, Selecting and Activating Objects is not required in VBA code, so I have not copied those statements into the code below.

Sub CreateWordDocument()

'Connect using Early Binding.
'Remember to set the reference to the Word Object Library
'In VBE Editor Tools -> References -> Microsoft Word x.xx Object Library
Dim WordApp As Word.Application
Set WordApp = New Word.Application

WordApp.Documents.Add Template:="Normal", NewTemplate:=False, DocumentType:=0
WordApp.Visible = True 'New Apps will be hidden by default, so make visible

Set WordApp = Nothing 'release the memory

End Sub

A point to note, when an application is opened with VBA, it is normally opened in the background. To make the Word document visible I have added the following code:

WordApp.Visible = True

Record macros in Excel (if necessary)

If we want to copy Excel content into a Word document, we will need to copy that content using Excel VBA. We can use the Macro Recorder in Excel to obtain the VBA code for copying, then we can use the Word Macro Recorder to obtain the VBA code for pasting.

Macro Recording from Excel – selecting a worksheet and copying chart

Sheets("Sheet1").Select
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.ChartArea.Copy

Macro Recording from Word – pasting a chart into a document

Selection.PasteSpecial Link:=False, DataType:=wdPasteEnhancedMetafile, _
        Placement:=wdInLine, DisplayAsIcon:=False

We can add both Macro recordings into our Excel macro. Remember to add WordApp. at the start of each statement of Word VBA code.

Sub CreateWordDocument()

'Connect using Early Binding.
'Remember to set the reference to the Word Object Library
'In VBE Editor Tools -> References -> Microsoft Word x.xx Object Library
Dim WordApp As Word.Application
Set WordApp = New Word.Application

WordApp.Documents.Add Template:="Normal", NewTemplate:=False, DocumentType:=0
WordApp.Visible = True 'New Apps will be hidden by default, so make visible

'code copied from Excel Macro recorder
Sheets("Sheet1").Select
Selection.ChartObjects("Chart 1").ChartArea.Copy

'code copied from Word Macro recorder with WordApp. added to the front.
WordApp.Selection.PasteSpecial Link:=False, DataType:=wdPasteEnhancedMetafile, _
        Placement:=wdInLine, DisplayAsIcon:=False

Set WordApp = Nothing 'release the memory 

End Sub

This code is not particularly efficient; it contains a few unnecessary sections code. However… it works!

Repeat the previous steps until macro complete

By repeating the same steps above; recording short actions, then transferring the code into Excel, we can slowly build up much more complex Macros. The key is to keep the actions short, if you do too many actions with the Macro Recorder, code starts to look long and scary.

If you’ve you tried to use the Macro Recorder before you will know that this is not as easy as it seems. And this simple tutorial may make you think it is easy, when it’s not. Sometimes, it can be quite frustrating trying to find out where the issues and errors are. The key to success is recording very short actions, such as those below and copying them into the Visual Basic Editor.

'Pressing the Enter Key to move to a new line in Word
WordApp.Selection.TypeParagraph

'Turn on/off Bold Text
WordApp.Selection.Font.Bold = wdToggle

'Change Font Size
WordApp.Selection.Font.Size = 16

'Type some text
WordApp.Selection.TypeText Text:="Here is some text"

You will soon build up a standard library of code that you can use to control Word for most basic tasks.

In recorded VBA code from Word, the word “Selection” in the code often refers to the document itself. It is possible to make the code a little bit more efficient by declaring the document as a variable. If we were opening a specific document, we could include this at the start, just below the declaration of the application.

'Declare a specific document as a variable
Dim WordDocument As Object
Set WordDocument = WordApp.Documents.Open(sourceFileName)

Or, if we created a new document we could include the following below the declaration of the application variable.

'Delcare a new document as a variable
Dim WordDocument As Object
Set WordDocument = WordApp.Documents.Add Template:="Normal", _
NewTemplate:=False, DocumentType:=0

If we have created the document as a variable we can then reference the specific document. This code:

WordApp.Selection.TypeParagraph

Would become this code:

WordDocument.TypeParagraph

Or this code:

WordApp.Selection.TypeText Text:="Here is some text"

Would become this code:

WordDocument.TypeText Text:="Here is some text"

This method is much better, as it doesn’t rely on the Selection of the user being in the right place.

Conclusion

We have seen in this post that it is possible to create complex Macros to automate Word from Excel using VBA. By understanding how to declare variables for the application and documents we can create much more robust macros, even without knowing a lot of VBA code.

Related Posts:

  • 5 quick ways to embed a Word document in Excel
  • Controlling Powerpoint from Excel using VBA
  • Edit links in Word using VBA
  • How to link Excel to Word

Headshot Round

About the author

Hey, I’m Mark, and I run Excel Off The Grid.

My parents tell me that at the age of 7 I declared I was going to become a qualified accountant. I was either psychic or had no imagination, as that is exactly what happened. However, it wasn’t until I was 35 that my journey really began.

In 2015, I started a new job, for which I was regularly working after 10pm. As a result, I rarely saw my children during the week. So, I started searching for the secrets to automating Excel. I discovered that by building a small number of simple tools, I could combine them together in different ways to automate nearly all my regular tasks. This meant I could work less hours (and I got pay raises!). Today, I teach these techniques to other professionals in our training program so they too can spend less time at work (and more time with their children and doing the things they love).


Do you need help adapting this post to your needs?

I’m guessing the examples in this post don’t exactly match your situation. We all use Excel differently, so it’s impossible to write a post that will meet everybody’s needs. By taking the time to understand the techniques and principles in this post (and elsewhere on this site), you should be able to adapt it to your needs.

But, if you’re still struggling you should:

  1. Read other blogs, or watch YouTube videos on the same topic. You will benefit much more by discovering your own solutions.
  2. Ask the ‘Excel Ninja’ in your office. It’s amazing what things other people know.
  3. Ask a question in a forum like Mr Excel, or the Microsoft Answers Community. Remember, the people on these forums are generally giving their time for free. So take care to craft your question, make sure it’s clear and concise.  List all the things you’ve tried, and provide screenshots, code segments and example workbooks.
  4. Use Excel Rescue, who are my consultancy partner. They help by providing solutions to smaller Excel problems.

What next?
Don’t go yet, there is plenty more to learn on Excel Off The Grid.  Check out the latest posts:

Устали выполнять повторяющиеся задачи в Microsoft Word? В программе похоронен мощный инструмент автоматизации, который может избавить вас от этой работы. Мы говорим о макросах, и хотя эта функция опирается на Microsoft Visual Basic для приложений (VBA), вы можете использовать ее, даже если идея кодирования вызывает у вас хиби-джиби.

При нажатии кнопки Word записывает ваши действия, создавая макрос, который вы можете воспроизводить так часто, как захотите. Если вы любите приключения, вы можете легко изменить макрос для дополнительной степени автоматизации.

Здесь мы покажем вам один простой, но полезный пример: как автоматизировать функцию поиска и замены Word.

Запись макроса

В этом примере вы уважаемый президент Общества сохранения антикварной стоматологической техники. У вас есть десятки документов Word об исторических зубных протезах и тому подобном, и все они имеют заметное упоминание имени общества. Затем внезапно правление голосует за изменение названия на Лигу сохранения стоматологического антиквариата. Теперь вам нужен простой способ обновить документы.

Вы можете начать с нового пустого документа или открыть существующий. Если вы еще этого не сделали, вам нужно включить вкладку «Разработчик».

Перейдите в Файл> Параметры> Настроить ленту . Справа в разделе « Основные вкладки» установите флажок « Разработчик» . Выберите ОК и выйдите.

Теперь создадим наш макрос.

  1. Щелкните Разработчик> Записать макрос .
  2. Вам будет предложено назвать макрос. Введите «ChangeSocietyName» или любое другое имя, которое вам подходит. При именовании макросов избегайте пробелов, точек, восклицательных знаков и специальных символов, иначе вы получите сообщение об ошибке. Вы можете использовать числа, но первым символом должна быть буква.
  3. Вы можете назначить макрос кнопке и / или сочетанию клавиш, но это не обязательно. Если вы выберете кнопку, Word позволит вам добавить ее на панель быстрого доступа. Вы также можете добавить краткое описание макроса.
  4. Нажмите ОК , и Word запишет ваши действия. Нажмите Ctrl + H, чтобы открыть диалоговое окно « Найти и заменить ».
  5. Введите «Общество сохранения старинной стоматологической техники» в поле «Найти» и «Лига сохранения антиквариата» в поле «Заменить».
  6. Нажмите « Заменить все», чтобы выполнить операцию «Найти и заменить». Это единственное действие, которое вы хотите записать. Не имеет значения, заменяет ли макрос какой-либо текст. Дело в том, чтобы сохранить его для других документов.
  7. Это важно: щелкните Разработчик> Остановить запись . В противном случае макрос будет включать все последующие действия.

А теперь посмотрим на вашу работу. Откройте документ, содержащий название общества. Щелкните Разработчик> Макросы . Если дважды щелкнуть ChangeSocietyName, Word автоматически выполнит операцию «Найти и заменить».

Совет: Во время записи макроса вам может потребоваться выполнить действие, которое вы не хотите записывать. Например, вы можете захотеть скопировать и вставить текст в диалоговое окно «Найти и заменить», а не вводить его вручную. Нет проблем: просто нажмите « Разработчик»> «Приостановить запись» , скопируйте и вставьте текст, затем нажмите « Разработчик»> «Продолжить запись» . Затем вы можете завершить запись макроса, как описано выше.

Хотя мы сосредоточились здесь на Microsoft Word, вы также можете использовать макросы для повышения производительности в Excel . И есть много макросов для экономии времени для Microsoft OneNote .

Погружение в код

Теперь мы более подробно рассмотрим наш новый макрос Word. Перейдите в « Разработчик»> «Макросы» , но вместо двойного щелчка по макросу выберите его и нажмите « Изменить» . Это открывает редактор Visual Basic, автономную среду для создания приложений VBA.

Это может показаться устрашающим, но вы можете игнорировать меню и большинство панелей. Вместо этого сосредоточьтесь на окне, содержащем код. Как видите, Word только что написал макрос, который выполняет поиск и замену.

 
Sub ChangeSocietyName()
'
' ChangeSocietyName Macro
' Rename Society for the Preservation of Antique Dental Appliances
'
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "Society for the Preservation of Antique Dental Appliances"
.Replacement.Text = "Dental Antiques Preservation League"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub

Давайте объясним, что здесь происходит.

«Подпрограмма» в первой строке является сокращением от «подпрограммы», небольшой программы, которая может работать сама по себе или как часть более крупного приложения VBA. Строки, перед которыми стоят одинарные кавычки, предназначены для комментариев. Кавычки указывают VBA игнорировать любые утверждения в этих строках.

Затем мы переходим к сути кода: коду, который выполняет операцию поиска и замены . Как видите, он определяет значения для каждого параметра в диалоговом окне «Найти и заменить», включая текст и текст замены в кавычках. Команда Selection.Find.Execute в конце эквивалентна нажатию кнопки «Заменить все».

Модификация макроса

Чтобы использовать макросы, вам не нужно возиться с кодом или даже смотреть на него. Но вы можете получить больше от этой функции, если захотите погрузиться в нее. Например, предположим, что вы допустили опечатку при записи макроса. Вместо того, чтобы перезаписывать это, вы можете зайти в Visual Basic и исправить.

Вы также можете настроить макрос, чтобы сделать его более полезным, и этим мы здесь и займемся. Когда вы запускаете «Найти и заменить» вручную или с помощью макроса, Word запоминает найденный и заменяющий текст. В следующий раз, когда вы откроете диалоговое окно «Найти и заменить», оно будет выглядеть следующим образом.

Было бы лучше очистить значения, чтобы получить чистое диалоговое окно. Мы сделаем это с помощью второго макроса, но на этот раз мы сделаем это непосредственно в Visual Basic.

  1. В редакторе Visual Basic выберите всю подпрограмму от первой строки до End Sub. Нажмите Ctrl + C, чтобы скопировать его.
  2. Поместите курсор под End Sub и нажмите Ctrl + V. Вы только что продублировали подпрограмму.
  3. Измените имя с ChangeSocietyName на ClearFindReplace (или любое другое имя, которое вам подходит). Это важно, потому что VBA выдаст сообщение об ошибке, если вы попытаетесь запустить макросы с повторяющимися именами.
  4. В значениях .Text и Replacement.Text удалите текст, но оставьте кавычки. По сути, вы говорите Word ничего не найти и ничего не заменить, но вы также очищаете эти значения.

Результат должен выглядеть так:

 
Sub ClearFindReplace()
'
' ClearFindReplace Macro
' Clear Text from Find and Replace dialog
'
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub

Теперь вернемся к макросу ChangeSocietyName. Под кодом поиска и замены, но перед End Sub введите ClearFindReplace (без скобок в конце).

Правильно: вам не нужно вводить весь код, который вы только что создали, только имя макроса.

 
Sub ChangeSocietyName()
'
' ChangeSocietyName Macro
' Rename Society for the Preservation of Antique Dental Appliances
'
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "Society for the Preservation of Antique Dental Appliances"
.Replacement.Text = "Dental Antiques Preservation League"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
ClearFindReplace
End Sub

Когда Word запускает ChangeSocietyName, сначала выполняется исходная функция «Найти и заменить». Затем он интерпретирует ClearFindReplace как команду для запуска второго макроса.

Идем дальше с VBA

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

Поскольку VBA – это полноценный язык программирования, вы можете включать подпрограммы в более крупные приложения с переменными, циклами, условными операторами и т. Д. И как только вы изучите основы VBA в Word, вы сможете применить многие из этих знаний для создания макросов в Microsoft Excel и Access.

Чтобы пойти дальше, вы захотите узнать больше о соглашениях VBA и редакторе Visual Basic, например о том, как организовать свой код и как бороться с ошибками. Но даже если вы хотите придерживаться простых функций, подобных описанным здесь, вы можете значительно улучшить свою производительность.

Время на прочтение
7 мин

Количество просмотров 8.1K

Картинка pch.vector, freepik

Практически каждый из читателей, наверняка не раз (а кто-то и на постоянной основе), имеет потребность в написании и редактировании документов в среде Word.

Однако если подобная деятельность производится с некоторой периодичностью, пытливый ум сразу начинает думать о способах оптимизации своего труда. Одним из таких способов является программирование в среде Visual Basic for Applications,- среде разработки, которая встроена в известные офисные продукты: Word, Excel, PowerPoint и т.д. Статья больше вводная, для тех, «кто совсем не в теме» :-).

Следует сразу оговориться, что любое программирование требует для изучения достаточных временных ресурсов и, в ряде случаев, подобные трудозатраты могут быть неоправданными.

Поэтому, в этих случаях имеет смысл просто — напросто записать макрос. Которой представляет собой записанную последовательность ваших действий, которая должна быть повторена многократно для некой, часто повторяющейся обработки.

Макрос
Тут следует сказать, что по умолчанию, меню для записи макроса скрыто и его необходимо явным образом включить. Для этого нужно пройти по пути: Файл-Параметры

В открывшемся окне перейти в настройку ленты:

Далее, в правом окне, под названием «Основные вкладки», поставить галочку рядом с опцией «разработчик»:

В результате этих действий на ленте сверху у вас появится вкладка «разработчик»:

Войдя в которую, в левой части, вы как раз и сможете найти две интересующие нас опции: «Visual Basic» и «Макросы»:

Соответственно, далее если мы нажимаем на кнопку «Запись макроса», то мы сможем записать нашу последовательность действий:

Созданный макрос можно сохранить либо в конкретном документе, либо сделать его доступным для всех документов (если сохраним его в шаблоне normal.dotm):

После чего, записанный макрос может быть воспроизведён, если мы перейдём, нажав на кнопку «Макросы»:

Для многих достаточно тривиальных задач, этого бывает достаточно. Однако бывают ситуации, когда нам необходимо применить программирование.

Здесь существуют 2 опции:

  • правка кода уже имеющегося макроса
  • написание кода с нуля.

Для первого случая, нам нужно перейти нажав на «макросы», для того чтобы открылась окно выбора макроса и нажать на кнопку «отладка»:

Это приведёт к запуску среды разработки, где вы сможете увидеть свой записанный макрос в виде кода. Кстати говоря, это является одним из интересных лайфхаков, когда недостаточное знание программирования на VBA вы подменяете сгенерированным кодом макроса и реверс-инжинирингом, с попыткой вникнуть, «а как оно там внутри устроено?»:

Чуть выше, мы произвели ряд манипуляций, для того чтобы вынести вкладку «разработчик» на ленту. Однако если вы хотите не писать макросы, а писать код сразу, совершенно необязательно добавлять эту вкладку на ленту.

Среду разработки можно вызвать нажатием сочетания клавиш Alt+F11, после чего, написав нужный код, запустить его прямо из среды разработки.

Список готовых макросов можно вызвать нажатием сочетания клавиш ALT+F8.

Visual Basic for Applications(VBA)
Как мы уже говорили, разработка кода для приложений Office ведётся с использованием специального кода, который является версией интерпретируемого языка Visual Basic (несколько упрощённой его версией).

Благодаря использованию объектной модели компонентов (COM), могут применяться компоненты, используемые в ряде программ одновременно, для этого используется технология OLE (Object Linking and Embedding), суть которой заключается передаче части работы от одной программы к другой (в рамках среды Windows), и получение обратно результата.

Это означает, что теоретически, вы можете на VBA написать программу, которая будет использовать, например, средства Photoshop или Corel Draw, если конечно они установлены у вас на компьютере (однако, есть подозрение, что для этого потребуется более расширенная версия языка, чем тот, который идёт в комплекте с пакетом Office).

В рамках VBA объекты представлены в виде иерархии: Application/Document/Paragraph и т.д., то есть, как можно видеть в этой строке, каждый предыдущий — содержит последующий.

Получается своего рода «матрёшка», где одно вложено в другое и, если задуматься, это достаточно логично.

Например, главным объектом является Application. Создание этого объекта, другими словами, означает просто запуск Word. Но программа сама по себе никому не интересна, необходимо, чтобы внутри этой программы был создан или открыт некий документ (объект Document). В свою очередь, этот объект содержит целый ряд других элементов иерархии, которые служат для задания его параметров и оформления.

Согласно этому источнику, несмотря на то, что Word содержит множество объектов, по большому счёту, для успешной работы достаточно понимания всего лишь 5 объектов:

  • Application
  • Document
  • Selection
  • Range
  • Bookmark

Логика здесь следующая:

  • мы запустили Word (Application),
  • создали или открыли в нём документ(Document),
  • дальнейшие манипуляции в этом документе происходят либо с постановкой курсора в определенное место, либо с выделением определённого места в документе(Range).

Последний же объект (Bookmark) имеет смысл изучить для создания удобной навигации по документам, так как он просто управляет созданием удобных закладок.

Каждый из перечисленных выше объектов, имеет свой набор свойств и методов.

Более подробно о их сути вы можете почитать вот здесь.

В свою очередь, наиболее полный список всех объектов, с их описанием вы можете найти вот здесь.

Вкратце, любая программа на Visual Basic представляет собой сочетание приложения (в нашем случае Word), среды разработки и модулей.

Под модулями понимаются процедуры, которые содержат в себе программный код.

Для создания модуля, всего лишь нужно перейти в соответствующий шаблон (например, если мы создаём модуль, который должен быть доступен для всех документов, мы создаём его в шаблоне Normal). Для этого нажимаем на папке Microsoft Word Objects — правой кнопкой мыши и проходим по пути:

Модули могут быть представлены двумя видами:

  • подпрограммы
  • функции (предназначены для вычисления конкретного значения).

Структура типичной подпрограммы выглядит следующим образом:

Sub имя_подпрограммы ([Параметры])
Тело подпрограммы
End Sub

Структура функции выглядит следующим образом:

Sub имя ([Параметры])
Тело функции
имя=выражение
End Sub

Например, если у нас существует некая функция которая должна возвращать определённое значение, она может выглядеть следующим образом:

Sub TextFinder ([Параметры])
Тело функции
TextFinder=Selection.Find.found
End Sub

На примере тех же самых макросов, если у нас их более 1, они открываются в среде разработки, разделённые на отдельные подпрограммы, располагаясь друг за другом:

Для более полного ознакомления с языком Visual Basic для приложений, следует обратиться к официальному справочнику по языку.

Visual Basic for Applications является объектно-ориентированном языком программирования и полностью поддерживает постулаты этой концепции.

Типичная команда выглядит как разделённая точками в стиле ООП, где мы спускаемся по иерархии в самый низ, — до конкретного действия:

Application.ActiveDocument.PageSetup.Orientation = wdOrientLandscape

Например, приведённая выше команда, служит для того, чтобы установить альбомную ориентацию листа.

В редакторе кода присутствует система автодополнения кода: после того как вы ввели первый уровень объектной модели и поставили после него точку, система сама предлагает вам доступные варианты следующего уровня:

Весьма полезной является и справочная система, встроенная в редактор:
для получения справки необходимо всего лишь поставить курсор на нужную команду или место кода и нажать F1. Такая оперативность получения справки существенно облегчает самостоятельное изучение программирования в этой среде:

Достаточно интересным является режим отладки программы. Для этого, вам необходимо
записать какой-либо макрос, далее, войти в режим его отладки:

В этом режиме вы увидите, что та команда, которая будет выполнена следующей, — окрашена жёлтым цветом. В этом режиме исполнение команд производится построчно, что позволяет отловить ошибку, закравшуюся на каком-либо из этапов.

Для того чтобы исполнить следующую команду, следует каждый раз нажимать на клавишу F8:



Если параллельно с редактором кода вы откроете документ Word, на примере которого вы отрабатываете этот макрос, то вы будете сразу визуально видеть, что делает каждая построчно выполняемая команда (например, если это переход в некую ячейку таблицы и её выделение, — вы будете видеть этот процесс пошагово).

Но тут есть один нюанс: как вы могли видеть выше, программа начинает исполняться с самого начала. Но программа может быть достаточно длинной! Как сделать так, чтобы можно было провести, условно говоря, «юнит-тест» участка программы, который находится не в самом начале?

Для этого нужно всего лишь кликнуть в серую зону слева от программы — и там появится красная метка. Она означает то место, с которого стартует выполнение кода. Теперь, если мы нажмём на F8, — начало исполнения перескочит на эту метку:


Вообще говоря, программирование на VBA может быть достаточно мощной штукой, так как позволяет не только писать некие простые макросы, но даже и создать свой программный продукт, для генерации каких-либо отчётов или форм (и не только). Да, конечно, я сам имею такую слабость, — не желая изучать имеющиеся у продукта инструменты, пытаюсь решить проблему собственными знакомыми костылями (ну, знаю я, например, Java, — значит, буду решать проблему в рамках этого языка, игнорируя встроенные возможности Word). Однако, это не совсем правильный подход, так как «ученье — свет» :-).

Кто к этому так подходит, имеет и неплохие плюшки: совсем недавно на хабре вышла статья «как я с помощью VBA оплатил себе университет», которая наглядно показывает, что программирование на этом языке, в среде Office ещё рано списывать и может быть к этому стоит присмотреться повнимательней.

P.S. Вот мы тут гоняемся за интеллектуальными IDE, модными актуальными языками… А может вот оно, а? :-)

Будет очень интересно почитать в комментах, если кто то из читателей использовал неким интересным образом программирование под word в VBA и какие результаты это дало!

В двух словах изложу свой опыт: приходилось использовать достаточно продвинутые макросы для написания документации по компьютерному железу. Макросы позволяли «одним кликом» форматировать гигантскую таблицу с параметрами (регистры, поля регистров и их описание и т.д.). Форматировать хитро: первую строку выделить, первый столбец — искать в каждой строке диапазон битов регистра, вида [12:0], если найдено — применить стиль; такая же сложная логика форматирования по всей таблице (поиск определённых участков и их оформление. Скажем, таблица на 50 строк форматировалась… Секунд 15-20. Вручную — до бесконечности (в зависимости от лени и загруженности работой). Так что, макросы имеют право на жизнь!

Автор статьи

Сергей Андреевич Дремук

Эксперт по предмету «Программирование»

Задать вопрос автору статьи

Определение 1

Microsoft Office – одна из самых популярных программных систем, используемых во всем мире.

Трудно найти компьютер, на котором не был бы установлен текстовый редактор Word. Представляя собой систему приложений, тесно связанных друг с другом, MS Office открывает перед своими пользователями самый широкий спектр возможностей.

Мощнейшим средством создания приложений в MS Office стал язык Visual Basic for Application (VBA). Он пришел на смену языкам макропрограммирования, которые обычно включались в приложения.

Определение 2

VBA — высокоэффективное средство разработки приложений, поскольку принадлежит к объектно-ориентированным языкам программирования и обладает простотой макроязыков. Начинающие программировать в офисных пакетах пользователи могут записать свои действия с помощью макрорекордера и создавать макросы без изучения особенностей языка. Такая запись действий, а затем просмотр записанного кода являются простейшим способом для самостоятельного изучения VBA.

Замечание 1

Сейчас с помощью VBA можно легко и быстро создавать различные приложения, используя единую для всех офисных программ среду и язык. Разработчикам приложений очень пригодятся дополнительные возможности и средства VBA для управления пользовательским интерфейсом, оперирования событиями, обработки ошибок и другие средства, которые позволят создавать эффективные приложения с дружеским интерфейсом.

Остановимся на вопросах разработки VBA-приложений для MS Word. С помощью VBA вы можете автоматизировать любые операции, выполняемые в Word интерактивно (то есть вручную): создание документов, добавление в них текста или других графических элементов, форматирование, редактирование, сохранение и т.д. VBA выполнит все эти операции быстрее, точнее и с меньшими затратами, чем человек.

В MS Word создается много документов типа справка, расписка, докладная записка и так далее. Эти документы имеют постоянную и переменную части. Создание таких документов можно упростить, используя язык программирования VBA.

«Создание приложений на языке VBA для MS WORD» 👇

Создание текстового документа

Рассмотрим пример создания справки в MS Word 2007.

Создадим документ Word и сохраним его с именем spravka.docx.

Замечание 2

В случае отсутствия на ленте вкладки Разработчик создайте её с помощью команды — Параметры Word-Личная настройка. В группе Основные параметры работы с Word установите флажок в пункте Показать вкладку Разработчик на ленте.

Создать макрос1 с помощью макрорекордера. Макрос1 создает текст документа «СПРАВКА»:

  • выполнить команду Разработка, Макрос, Запись макроса;
  • в поле Имя макроса оставить Макрос1. В поле Макрос доступен для: выбрать имя данного документа spravka.docx. Нажать кнопку ОК;
  • набрать текст документа «СПРАВКА» с нужными параметрами абзаца и шрифта;
  • остановить запись макроса кнопкой Останов в закладке Код-Разработчик.

Проверить работу макроса запустив его на исполнение командой: Разработчик, Макросы, Макрос1, Выполнить.

Текст документа:

Создание приложений на языке VBA для MS WORD. Автор24 — интернет-биржа студенческих работ

Создадим Макрос2 с помощью макрорекордера. Макрос2 выполняет очистку содержимого документа (Выделить все ${Ctrl+A}$, клавиша Delete).

Создадим панель быстрого доступа для spravka.docx с кнопками для запуска макросов.

Для этого необходимо:

  • выбрать пункт меню Параметры Word-Настройка;
  • в окне Настройка панели быстрого доступа и сочетаний клавиш на вкладке Выбрать команду из выбрать пункт Макросы, а на вкладке Настройка панели быстрого доступа выбрать пункт Для Spravka;
  • в том же диалоговом окне команд Макросы выделить команду Макрос1 и добавить в панель быстрого доступа для документа Spravka. Аналогично добавить команду Макрос2;
  • изменить надпись или значок на кнопке, назначенной макросу Изменить…, изменить кнопку и отображаемое имя (например, Справка), выбрать новый значок для кнопки, несколько изменить его и назначить макрос (Макрос1) этой кнопке;
  • аналогично изменить надпись и кнопку для вызова еще одного макроса (Макрос2), например Очистка документа.

Выполнить макросы, используя кнопки панели быстрого доступа для Spravka.

Сохранить документ на диске в личной папке в файле с именем spravka.doc с типом файла «Документ Word с поддержкой макросов».

Для выхода из Word выберите из меню Выход из Word.

Использование VBA при решении задач в Word

VBA поддерживает набор объектов, соответствующих элементам Word. Используя свойства и методы этих объектов можно автоматизировать все операции в Word. Однако целесообразно автоматизировать выполнение тех операций, для реализации которых нет стандартных средств в Word или их выполнение стандартными средствами является трудоемкой или рутинной работой. Рассмотрим наиболее важные объекты.

Объект Document представляет собой новый или созданный ранее открытый документ.

Основными свойствами объекта Document являются:

  • Count — количество открытых в данный момент документов;
  • ActiveDocument — активный документ.

Некоторые методы объекта Document и коллекции Documents:

  • Open — открывает файл, содержащий существующий документ и автоматически добавляет его в коллекцию;
  • Add — добавляет новый пустой документ;
  • Save — сохраняет изменения в существующем документе без закрытия;
  • Save As (только для объекта) — сохраняет активный вновь созданный документ в текущей папке;
  • Item — позволяет получить доступ к элементу коллекции;
  • Activate (только для объекта) — активизирует открытый документ;
  • PrintOut (только для объекта) — печать документа;
  • Close — закрывает документ.

Объекты Character (символ), Word (слово), Sentence (предложение), Paragraph (абзац), Section (раздел документа) задают структуризацию текста документа.

Все эти объекты имеют свойства:

  • Count — свойство возвращает количество элементов в коллекции;
  • First — свойство возвращает объект, являющийся первым элементом коллекции;
  • Last — свойство возвращает объект, являющийся последним элементом.

Коллекции Characters, Words, Sentences имеют единственный метод Item(Index).

Коллекция Paragraphs имеет все вышеперечисленные для данной группы коллекций свойства и множество свойств, значения которых определяют формат абзаца.

Формат абзаца может быть определен и с помощью методов. Приведем некоторые методы коллекции Paragraphs:

  • Item — определяет элемент коллекции;
  • Add — добавляет новый пустой абзац (параметр метода указывает точку вставки, задается объектом Range);
  • InsertParagraph, InsertParagraphAfter, InsertParagraphBefore — осуществляют вставку пустого абзаца вместо текста или после, или перед текстом, задаваемым объектом Selection или Range;
  • Reset — удаляет форматирование, сделанное вручную, применяя к абзацу формат, заданный стилем абзаца;
  • Indent, Outdent — увеличивают, уменьшают отступ абзаца от края листа;
  • TabHangingIndent(Count), TabIndent(Count) — увеличивают (Count>0), уменьшают (Count
  • Space1, Space2, Space15 — устанавливают межстрочный интервал (одинарный, двойной, полуторный).

Объекты Range (диапазон) и Selection (выделение) представляют части документа.

Определение 3

Объект Range позволяет задать произвольный диапазон, представляющий собой последовательность индексированных элементов и может быть получен через метод Range или свойство Range других объектов.

Свойствами объекта Range являются:

  • Start — начальная символьная позиция диапазона;
  • End — конечная символьная позиция диапазона;
  • Text — позволяет получить или изменить содержимое объекта.

Определение 4

Объект Selection задает выделенную в документе область (фрагмент). Выделенный в документе фрагмент задает непрерывную область элементов, но не является диапазоном, заданным своим началом и концом. Выделить можно только один фрагмент, поэтому один объект Selection может быть активен в данный момент времени, он может быть получен с помощью свойства Selection или метода Select других объектов.

Ниже приведены некоторые методы присущие объектам Selection и Range:

  • Move — метод перемещения точки вставки;
  • MoveStart, MoveEND — методы изменения значения свойств Start и End;
  • Collapse — сворачивает диапазон к его началу или концу;
  • Next — метод получения ссылки на очередной элемент коллекции объектов в диапазоне или выделенном фрагменте;
  • Delete — удаляет текст, входящий в диапазон;
  • InsertAfter , InsertBefore вставляет текст до или после текста, входящего в диапазон.
  • Copy — копирует объект в буфер обмена;
  • Cut — перемещает объект в буфер обмена;
  • Paste — позволяет поместить содержимое буфера в область, заданную объектом Range или Selection.

Находи статьи и создавай свой список литературы по ГОСТу

Поиск по теме

Понравилась статья? Поделить с друзьями:
  • Макрос для word готовые
  • Макрос для word вставка текста
  • Макрос для word брошюра
  • Макрос для word 2016
  • Макрос для word 2013