Vba 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», чтобы запустить макрос.

Word is a Microsoft application used for word processing. VBA is embdedded within the Word application and can be used to programmatically work with Word. The Word Object Library contains classes that make working with Word in VBA possible. The classes in the Word Object Library are collectively referred to as the Word Object Model. When using VBA in Word, a reference is included to the Word Object Library.

Word Object Model

The Word Object Model contains classes that make it possible to work with Word in VBA. The Word Object Model contains many classes but the general overview of the model is Application → Document → Range.


  1. Application


    1. Documents


      1. Document

        1. Range
        2. Sentences

        3. Paragraphs

          1. Paragraph

        4. Bookmarks

          1. Bookmark

        5. Tables

          1. Table

        6. ContentControls

          1. ContentControl

        7. Comments

          1. Comment
        8. MailMerge

    2. Windows

      1. Window
    3. Selection

Context

The place where VBA code is written determines the implied context when referring to classes. For example, when using VBA in Word and referring to the Application object, it is implied that Application and Word.Application are the same object. However, when using VBA in another application to work with Word, it is necessary to qualify references to avoid naming collisions with classes in the other application. Using qualified references requires that a reference is set to the library where the classes are defined. If a reference cannot be set, late-binding can be used instead.

Public Sub Example()

    '''In Word

    Debug.Print Application Is Word.Application 'Prints: True

End Sub

Public Sub Example()

    '''In Excel

    'Requires a reference to the Word Object Library

    Debug.Print Application Is Word.Application 'Prints: False

    Debug.Print Application Is Excel.Application 'Prints: True

End Sub

To retrieve the Word Application object from another application, attempt to retrieve the running application and if that fails start a new instance of the application.

Public Function GetWordApp() As Object

    On Error Resume Next
    Set GetWordApp = GetObject(, "Word.Application")
    On Error GoTo 0

    If GetWordApp Is Nothing Then
        Set GetWordApp = CreateObject("Word.Application")
    End If

End Sub

Application

The Application object represents the Word application itself. The Application object is the top-level object and provides access to the rest of the Word Object Model. The Application object can be used to access functionality and properties of the Word application.

Options

The Application.Options property contains a number of options that can be set for the Word application.

Public Sub Example()

    Word.Application.Options.DisplayGridLines = True

End Sub

Validation Methods

The Application object has methods which facilitate validating and cleaning text:

  • Application.CheckGrammar
  • Application.CheckSpelling
  • Application.CleanString
Public Sub Example()

    Debug.Print Word.Application.CheckGrammar("Hello my name is Peter.")
    Debug.Print Word.Application.CheckGrammar("Hello, my name is Peter.")

    Debug.Print Word.Application.CheckSpelling("Helllo, how are you?")
    Debug.Print Word.Application.CheckSpelling("Hello, how are you?")

    Dim S As String
    S = "Hello," & Chr(0) & "World!"
    S = Word.Application.CleanString(S)
    Debug.Print Asc(Mid$(S, 7, 1)) 'Null character replaced with Space

End Sub

Documents

The Document class represents a Word document. The Documents collection object represents all open Word documents and can be accessed from the Application.Documents property.

Iterate Documents

To iterate over all open documents use a For Each loop with the Documents collection object.

Public Sub Example()

    Dim D As Word.Document

    For Each D In Word.Application.Documents
        Debug.Print D.Name
    Next D

End Sub

Add Document

To add a document use the Documents.Add method.

Public Sub Example()

    Dim D As Word.Document
    Set D = Word.Application.Documents.Add 

End Sub

Save Document

To save a document use the SaveAs2 method and the Save method. To save a document in a specific file format supply the SaveAs2 method with a FileFormat argument from the WdSaveFormat enum.

Public Sub Example()

    Dim D As Word.Document
    Set D = Word.Application.Documents.Add

    D.SaveAs2 Environ$("USERPROFILE") & "DesktopExample.docx", wdFormatDocumentDefault

    D.Content.InsertAfter "Hello, World!"

    D.Save

End Sub

Open and Close Document

To open a document use the Documents.Open method. To close a document use the Close method.

Public Sub Example()

    Dim D As Word.Document

    Set D = Word.Application.Documents.Open(Environ$("USERPROFILE") & "DesktopExample.docx")

    D.Content.InsertAfter "Hello, World!"

    D.Save

    D.Close

End Sub

Check Spelling and Grammar

The CheckSpelling method can be used to check a Document for spelling mistakes. The CheckGrammar method can be used to check a Document for grammar issues.

Public Sub Example()
    
    Dim D As Word.Document
    Set D = Word.Application.Documents(1)
    
    D.CheckSpelling
    D.CheckGrammar
    
End Sub

Ranges

The Range object represents an area of a Word document. Working with Ranges is important for using VBA with Word. There are different ways to retrieve a Range object.

Range Method

The Range method can be used to get a Range object using a starting character and ending character number.

Public Sub Example()

    Dim D As Word.Document
    Set D = Word.Application.Documents(1)

    Dim R As Word.Range
    Set R = D.Range(0, 10)

End Sub

Range Property

Certain objects in Word have a Range property which can be used to return a Range object.

Public Sub Example()

    Dim D As Word.Document
    Set D = Word.Application.Documents(1)

    Dim R As Word.Range
    Set R = D.Paragraphs(1).Range

End Sub

Content Property

The Content property of a Document object returns a Range object that represents all the content in the document.

Public Sub Example()

    Dim D As Word.Document
    Set D = Word.Application.Documents(1)

    Dim R As Word.Range
    Set R = D.Content

End Sub

StoryRanges Property

The StoryRanges collection object contains Range objects that represent «stories». The types of stories are defined in the WdStoryType enum.

Public Sub Example()

    Dim D As Word.Document
    Set D = Word.Application.Documents(1)

    Dim R As Word.Range
    Set R = D.StoryRanges(wdMainTextStory) 'Same as Document.Content

End Sub

Sentences

The Document.Sentences property and the Range.Sentences property return a Sentences collection object containing a the sentences within a Document or Range. Each sentence is a Range object.

Public Sub Example()

    Dim D As Word.Document
    Set D = ThisDocument

    Dim Ss As Word.Sentences
    Set Ss = D.Range.Sentences

    Dim S As Word.Range
    For Each S In Ss
        Debug.Print S.Text
    Next S

End Sub

Paragraphs

The Paragraph object can be used to retrieve a Range object representing a paragraph. Paragraphs can be accessed from the Paragraphs collection object. Use the Document.Paragraphs property to retrieve the Paragraphs collection object for a Document.

Public Sub Example()

    Dim D As Word.Document
    Set D = Word.Application.Documents(1)

    Dim R As Range
    Set R = D.Paragraphs(1).Range

End Sub

Words

The Document.Words property and the Range.Words property return a Words collection object containing a collection of all the words within a Document or Range. Each word in the collection is a Range object.

Public Sub Example()

    Dim D As Word.Document
    Set D = Word.Application.Documents(1)

    Dim R As Word.Range
    For Each R In D.Words
        Debug.Print R.Text
    Next R

End Sub

Check Spelling, Grammar, and Synonyms

The Range.CheckGrammar method can be used to check a Range for Grammar issues.

The Range.CheckSpelling method can be used to check a Range for spelling mistakes.

The Range.CheckSynonyms method can be used to check for synonyms of a word.

Public Sub Example()

    Dim D As Word.Document
    Set D = Word.Application.Documents(1)

    D.Content.CheckSpelling
    D.Content.CheckGrammar
    D.Content.Words(1).CheckSynonyms

End Sub

Basic Methods

Basic methods of the Range object include Copy, Cut, Delete, Move, Paste, InsertAfter, and InsertBefore.

Basic Properties

Basic properties of the Range object include Bold, Font, Italic, Style, Text, And Underline.

Paragraphs

The Paragraph object represents a paragraph. The Paragraphs collection object contains a collection of Paragraph objects. Use the Document.Paragraphs property or the Range.Paragraphs property to get a Paragraphs collection containing all paragraphs in a Document or Range. The Paragraph object and the Paragraphs collection object have many of the same properties and methods. It may not be necessary to loop over all Paragraph objects in the collection, but instead call a particular method on the entire collection.

Public Sub Example()

    Dim D As Word.Document
    Set D = Word.Application.Documents(1)

    D.Paragraphs.IndentFirstLineCharWidth 4

End Sub

Bookmarks

The Bookmark class represents a Bookmark. The Bookmarks collection object contains a collection of Bookmark objects. Use the Document.Bookmarks property to get a Bookmarks collection containing all Bookmarks in a Document. Bookmarks can be used to locate part of a document.

Public Sub Example()

    Dim D As Word.Document
    Set D = Word.Application.Documents(1)

    Dim B As Word.Bookmark
    Set B = D.Bookmarks.Add("Test", D.Range(0, 0))

End Sub

Tables

The Table object represents a table with rows and columns. The Tables collection object contains a collection of Table objects. Use the Document.Tables property to get a Tables collection containing all Table objects in a Document.

Add Table

To add a Table use the Tables.Add method. The Add method takes a Range where the table will be added, the number of rows, the number of columns, the default table behavior as a member of the WdDefaultTableBehavior enum, and the auto fit behavior as a member of the WdAutoFitBehavior enum.

Public Sub Example()

    Dim D As Word.Document
    Set D = Word.Application.Documents(1)

    Dim T As Word.Table
    Set T = D.Tables.Add(D.Range(0, 0), 10, 3)

    With T.Borders
        .OutsideLineStyle = wdLineStyleSingle
        .OutsideLineWidth = wdLineWidth025pt
        .InsideLineStyle = wdLineStyleSingle
    End With

    T.Cell(1, 1).Range.Text = "Header1"
    T.Cell(1, 2).Range.Text = "Header2"
    T.Cell(1, 3).Range.Text = "Header3"

    T.Rows(1).Range.Bold = True

    T.Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
    T.Rows(1).Cells.VerticalAlignment = wdCellAlignVerticalCenter

End Sub

ContentControls

The ContentControl object represents a control. The ContentControls collection object contains ContentControl objects. Use the Document.ContentControls property to get a ContentControls collection containing all ContentControl objects in a Document.

Add ContentControl

To add a ContentControl use the ContentControls.Add method with a member of the WdContentControlType enum and provide a Range object for where the control will be added.

Public Sub Example()

    Dim D As Word.Document
    Set D = Word.Application.Documents(1)

    Dim CC As Word.ContentControl
    Set CC = D.ContentControls.Add(wdContentControlDropdownList, D.Range(0, 0))

    CC.DropdownListEntries.Add "List Entry 1", "Value 1", 1
    CC.DropdownListEntries.Add "List Entry 2", "Value 2", 2
    CC.DropdownListEntries.Add "List Entry 3", "Value 3", 3

End Sub

Comments

The Comment object represents a comment. The Comments collection object contains a collection of Comment objects. Use the Document.Comments property to get a Comments collection containing all Comment objects in a Document.

Add Comment

To add a Comment use the Comments.Add method and provide a Range object and the comment text.

Public Sub Example()

    Dim D As Word.Document
    Set D = Word.Application.Documents(1)

    Dim C As Word.Comment
    Set C = D.Comments.Add(D.Range(0, 0), "Test Comment")

End Sub

MailMerge

The MailMerge object provides the ability to use the MailMerge feature in VBA.

Public Sub Example()

    Dim D As Word.Document
    Set D = Word.Application.Documents(1)

    Dim SourcePath As String
    SourcePath = "C:ExampleMailingList.xlsx"

    D.MailMerge.Fields.Add Range:=D.Range(0, 0), Name:="Name"
    D.MailMerge.OpenDataSource _
        Name:=SourcePath, _
        ConfirmConversions:=False, _
        ReadOnly:=False, _
        LinkToSource:=True, _
        AddToRecentFiles:=False, _
        PasswordDocument:="", _
        PasswordTemplate:="", _
        WritePasswordDocument:="", _
        WritePasswordTemplate:="", _
        Revert:=False, _
        Format:=wdOpenFormatAuto, _
        Connection:= _
            "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "User ID=Admin;" & _
            "Data Source=" & SourcePath & ";" & _
            "Mode=Read;" & _
            "Extended Properties=""HDR=YES;IMEX=1;"";" & _
            "Jet OLEDB:System database="""";" & _
            "Jet OLEDB:Registry Path="""";" & _
            "Jet OLEDB:Engine Type=37;" & _
            "Jet OLEDB:Database ", _
        SQLStatement:="SELECT * FROM `Sheet1$`", _
        SQLStatement1:="", _
        SubType:=wdMergeSubTypeAccess

    With D.MailMerge
        .Destination = wdSendToNewDocument
        .SuppressBlankLines = True
        With .DataSource
            .FirstRecord = wdDefaultFirstRecord
            .LastRecord = wdDefaultLastRecord
        End With
        .Execute Pause:=False
    End With

End Sub

Find

The Find object represents the find operation. The Find object contains properties and methods to conduct a specific find operation.

Find

To find text set the Text property and use the Execute method. The Execute method returns True if the text was found. The Found property will be set to True if the text was found after Execute is called.

Public Sub Example()

    Dim D As Word.Document
    Set D = Word.Application.Documents(1)

    Dim F As Word.Find
    Set F = D.Content.Find

    With F
        .Text = "Hello, World!"
        Debug.Print .Execute
        Debug.Print .Found
    End With

End Sub

Find and Replace

To replace text set the Text property of the Find object and the Text property of the Find object’s Replacement object property. Set the Replace parameter of the Execute method to a member of the WdReplace enum.

Public Sub Example()

    Dim D As Word.Document
    Set D = Word.Application.Documents(1)

    Dim F As Word.Find
    Set F = D.Content.Find

    With F
        .Text = "Hello, World!"
        .Replacement.Text = "How's it goin'?"
        Debug.Print .Execute(Replace:=wdReplaceAll)
    End With

End Sub

Find and Highlight

To highlight found text use the HitHighlight method. To clear highlighted hits use the ClearHitHighlight method.

Public Sub Example()

    Dim D As Word.Document
    Set D = Word.Application.Documents(1)

    Dim F As Word.Find
    Set F = D.Content.Find

    With F
        .ClearHitHighlight
        .HitHighlight "Hello, World!"
    End With

End Sub

Match Options

Various matching options can be set by setting certain properties to True:

  • MatchAlefHamza
  • MatchAllWordForms*
  • MatchByte
  • MatchCase
  • MatchControl
  • MatchDiacritics
  • MatchFuzzy
  • MatchKashida
  • MatchPhrase
  • MatchPrefix
  • MatchSoundsLike
  • MatchSuffix
  • MatchWholeWord
  • MatchWildcards

Certain properties render other properties useless. For example, using MatchWildcards or MatchAllWordForms renders the MatchCase property meaningless.

Only one of the MatchPhrase, MatchWildcards, MatchSoundsLike, MatchAllWordForms, or MatchFuzzy options can be set to True at a given time.

When using the MatchAllWordForms property, the search text should be lowercase. Using uppercase causes the text not to match when it should.

Public Sub Example()

    '''Match and highlight forms of "run"

    Dim D As Word.Document
    Set D = Word.Application.Documents(1)

    Dim F As Word.Find
    Set F = D.Content.Find

    With F
        .MatchAllWordForms = True
        .MatchWholeWord = True
        'Search text must be lowercase. Matches with uppercase and lowercase
        .HitHighlight "run"
    End With

End Sub

ComputeStatistics

The Document.ComputeStatistics method or the Range.ComputeStatistics method can be used to retrieve information about the content of a Document or Range. Pass a member of the WdStatistic enum to retrieve a specific value.

Public Sub Example()

    Dim D As Word.Document
    Set D = Word.Application.Documents(1)

    Debug.Print "Characters: " & D.ComputeStatistics(wdStatisticCharacters)
    Debug.Print "CharactersWithSpaces: " & D.ComputeStatistics(wdStatisticCharactersWithSpaces)
    Debug.Print "FarEastCharacters: " & D.ComputeStatistics(wdStatisticFarEastCharacters)
    Debug.Print "Lines: " & D.ComputeStatistics(wdStatisticLines)
    Debug.Print "Pages: " & D.ComputeStatistics(wdStatisticPages)
    Debug.Print "Paragraphs: " & D.ComputeStatistics(wdStatisticParagraphs)
    Debug.Print "Words: " & D.ComputeStatistics(wdStatisticWords)

End Sub

word vba tutorial

Welcome to the Word VBA Tutorial. VBA is a great tool not only to be leveraged in MS Excel. Often it is worth to save some time doing repeatable tasks by adopting some VBA macros in Word or PowerPoint too. Today I wanted to focus a little bit on starting you off in Word VBA macro programming.

vba word tutorialWhen moving to macro programming in Word VBA you will stumble upon issues you would normally not expect in Excel. Lets take the example of moving around the Word file – in Excel you have spreadsheets which are easy to navigate around. In Word, however, you have a lot of different content e.g. text, objects like images and charts, tables etc. Navigating around Word file in VBA is the greatest challenge you will face. Today I would like to focus on that and other frequently used features in Word VBA. So let’s kick off this Word VBA Tutorial.

Starting your journey with programming in Visual Basic for Applications (VBA)? Start with my VBA Tutorial.

Word VBA is identical to Excel VBA – be sure to leverage the VBA Cheat Sheet

VBA Word Navigating

Let’s start with adding content to the most common places the start and end of a Word document in VBA. Know if you Google for this you will get tons of non-sense methods of navigating around Word files. I was truly amazed at how poorly it is documented.

Beginning and End of the Word Document

Go to the Beginning of a Word Document:

'Start - add text to the beginning of the Word Document
Dim startMark As Range
Set startMark = ActiveDocument.Range(0, 0)
startMark.Text = "This is the start of the document"

Go to the End of a Word Document:

'End - add text to the end of the Word Document
Dim endMark As Range
Set endMark = ActiveDocument.Range(Len(ActiveDocument.Range))
endMark.Text = "This is the end of the document"

Finding and replacing text in a Word Document with VBA

Finding and replacing text are basic functions that you will probably need to leverage every now and then.

'Find and print text in MsgBox
Dim selectText As Range
Set selectText = ActiveDocument.Content
selectText.Find.Execute "Hello"
If selectText.Find.Found Then
  MsgBox selectText.Text
End If
'Find and replace all instances of a specific text
Dim replaceText As Range
Set replaceText = ActiveDocument.Content
replaceText.Find.Execute FindText:="Hello", ReplaceWith:="Goodbye", Replace:=wdReplaceAll

VBA Word Text formatting

One of the first things you would want to do is probably text formatting in Word VBA.

Let’s start by adding some text to our document:

'Select the beginning of the document
ActiveDocument.Range(0).Select
'Type "Hello World!"
Selection.TypeText Text:="Hello World!"

Bold & Italic

To change the font weight to bold see below:

'Select the word "Hello"
ActiveDocument.Range(0, 5).Select

'Toggle the bold property
Selection.Font.Bold = wdToggle

To change the text decoration to italic see below:

'Select the word "World"
ActiveDocument.Range(0, 5).Select
'Toggle the bold property
Selection.Font.Bold = wdToggle

Below the final result of the code above:
Word VBA Tutorial: Bold and Italic

Font size and name

Using the “Hello World!” example above we can similarly change the text font name and font size as shown below:

'Change font size
Selection.Font.Size = 20 'Size: 20
Selection.Font.Grow 'Size: 22
Selection.Font.Shrink 'Size: 20
'Change font name to "Aharoni"
Selection.Font.Name = "Aharoni"

VBA Word Tables

When editing Word files you might want to leverage tables as it is much easier to navigate around them in an automated way. My approach is to insert/modify tables in Word without and borders (invisible). This way you can guarantee a consistent and easy to navigate structure in Word. Let’s go through some of the basic functions around tables.

Add a table

Let’s add a table to the beginning of the Word document:

 Dim begin As Range
 Set startMark = ActiveDocument.Range(0, 0)
 'range as Range, NumRows as Long, NumColumns as Long
 Call ActiveDocument.Tables.Add(startMark, 3, 6) 'add to beginning of doc, 3 rows, 6 cols

Edit cell text

'Modify cell (1,3) to "Hello World!"
With ActiveDocument.Tables(1)
        .Cell(1, 3).Range.Text = "Hello World!"
End With

Working on rows and columns

With ActiveDocument.Tables(1)
        ' Modify height of row 1
        .Rows(1).Height = CentimetersToPoints(0.65)
        ' Modify width of column 1
        .Columns(1).Width = CentimetersToPoints(2.54)
        'Merge cell (1,3) with cell (1,4) - cells must be next to each other
        .Cell(1, 3).Merge .Cell(1, 4)
End With

Formatting borders

'Modify row 1 border, single, black and 100pt
 With ActiveDocument.Tables(1).Rows(3).Borders(wdBorderBottom)
        .LineStyle = wdLineStyleSingle
        .LineWidth = wdLineWidth100pt
        .Color = wdColorBlack
End With

In progress…

Понравилась статья? Поделить с друзьями:
  • Testo 335 руководство по эксплуатации
  • Персиковое масло инструкция по применению для лица
  • Стационарный телефон филипс crd200 инструкция по применению
  • Эритромицин инструкция по применению мазь глазная инструкция по применению
  • Зарядное устройство для автомобильного аккумулятора gt pc6c инструкция