Word закладка для макроса

Применение закладок для заполнения различных бланков на основе документов Word из кода VBA Excel. Объект Bookmark и его свойство Range.

Работа с Word из кода VBA Excel
Часть 5. Bookmarks – закладки в документе Word
[Часть 1] [Часть 2] [Часть 3] [Часть 4] [Часть 5] [Часть 6]

Добавление закладок в шаблон

Закладки (Bookmarks) являются удобным средством для вставки изменяющихся реквизитов в шаблоны документов. К закладкам можно обращаться по имени и не заморачиваться подсчетом количества символов до того места, где должен быть вставлен текст.

Вставляются закладки в шаблон документа вручную. Например, для следующего шаблона

Шаблон договора аренды с закладками

Шаблон договора аренды с закладками

это можно сделать так:

  1. Вставляем в макет шаблона в места вставки изменяемых реквизитов поясняющий текст. В нашем шаблоне это – <Город>, <Дата>, <Наименование арендатора> и <Наименование арендодателя>. Реквизиты <Город> и <Дата> добавлены в ячейки таблицы, чтобы их можно было разместить в одной строке, а выровнять по разным краям. Границы ячеек оставлены для наглядности.
  2. Выделяем текст <Город> и вставляем закладку под именем Bookmark1 через меню: Вставка ⇒ Закладка. Добавляем остальные закладки: <Дата> – Bookmark2, <Наименование арендатора> – Bookmark3, <Наименование арендодателя> – Bookmark4.
  3. Сохраняем бланк документа как шаблон Word. Полный путь для нашего примера: «C:ТестоваяДокумент1.dotx».

Создание и заполнение бланка

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

Sub Primer()

On Error GoTo Instr

Dim myWord As New Word.Application, myDocument As Word.Document

    ‘Создаем новый документ по шаблону

    Set myDocument = myWord.Documents.Add(«C:ТестоваяДокумент1.dotx»)

    myWord.Visible = True

With myDocument

    ‘Замещаем текст закладок

    .Bookmarks(«Bookmark1»).Range = «г. Омск»

    .Bookmarks(«Bookmark2»).Range = Format(Now, «DD.MM.YYYY»)

    .Bookmarks(«Bookmark3»).Range = «Каев Кай Гердович (ИП)»

    .Bookmarks(«Bookmark4»).Range = «ООО «Снежная королева»»

    ‘Удаляем границы ячеек

    .Tables(1).Borders.OutsideLineStyle = wdLineStyleNone

    .Tables(1).Borders.InsideLineStyle = wdLineStyleNone

End With

    ‘Освобождаем переменные

    Set myDocument = Nothing

    Set myWord = Nothing

‘Завершаем процедуру

Exit Sub

‘Обработка ошибок

Instr:

If Err.Description <> «» Then

    MsgBox «Произошла ошибка: « & Err.Description

End If

If Not myWord Is Nothing Then

    myWord.Quit

    Set myDocument = Nothing

    Set myWord = Nothing

End If

End Sub

В результате работы кода VBA Excel получаем заполненный бланк документа на основе шаблона Word:

Заполненный бланк договора аренды

Заполненный бланк договора аренды

Я уже писал заметку о создании закладок в документе.

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

Однако стандартный метод создания закладки не слишком быстр и удобен. Здесь на помощь приходят макросы.

В замечательной книге Microsoft Word: комфортная работа с помощью макросов авторы описывают создание такого специальных макросов для работы с закладками.

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

В этой заметке я опишу процесс создания макросов своими словами с опорой на источник.

  1. Выделите слово или фразу в тексте, к которым вы хотите позже вернуться.
  2. В меню Сервис (Tools) перейдите на команду Макрос (Macro) и из открывшегося дополнительного списка выберите команду Начать запись (Record New Macro). В появившемся окне в поле шмя (Macro name) введите имя макроса (лучше латинскими буквами), например, Marker. Остальные поля можете оставить без изменения. Только проследите, чтобы в поле Макрос доступен для (Store macro in) была выбрана опция Всех документов Normal.dot.
  3. В группе Назначить макрос (Assign macro to) нажмите кнопку с изображением клавиатуры, чтобы назначить вашему макросу определенное сочетание клавиш, по которому он будет вызываться.
  4. В окне «Настройка клавиатуры» задайте сочетание клавиш для макроса, пусть это будет как в книге: ALT + A, и нажмите кнопку Назначить (Assign). Закройте окно.
  5. На экране появится панелька с управляющими кнопками для записи макроса:

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

  6. В меню Вставка (Insert) выберите команду Закладка (Bookmark). Откроется диалоговое окно.
  7. В поле Имя закладки (Bookmark name) введите какое-нибудь подходящее имя для вашей закладки (имя закладки не может содержать пробелы или начинаться с цифры). Пусть снова будет — Marker.
  8. Нажмите кнопку Добавить (Add). Окно закроется.
  9. На панели с управляющими кнопками нажмите кнопку с квадратиком, чтобы остановить запись макроса.
  10. Макрос создания закладки создан.

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

  1. В меню Сервис (Tools) перейдите на команду Макрос (Macro) и из открывшегося дополнительного списка выберите команду Начать запись (Record New Macro). В появившемся окне в поле Имя (Macro name) введите имя макроса (лучше латинскими буквами), например, GoToMarker. Остальные поля можете оставить без изменения. Только проследите, чтобы в поле Макрос доступен для (Store macro in) была выбрана опция Всех документов Normal.dot.
  2. В группе Назначить макрос (Assign macro to) нажмите кнопку с изображением клавиатуры, чтобы назначить вашему макросу определенное сочетание клавиш, по которому он будет вызываться.
  3. В окне «Настройка клавиатуры» задайте сочетание клавиш для макроса, пусть это будет как в книге: ALT + Q, и нажмите кнопку Назначить (Assign). Закройте окно.
  4. На экране появится панелька с управляющими кнопками для записи макроса.
  5. В меню Вставка (Insert) выберите команду Закладка (Bookmark). Откроется диалоговое окно.
  6. В большом поле под полем Имя закладки (Bookmark name) выберите имя вашей закладки.
  7. Нажмите кнопку Перейти (Go To), а затем кнопку Закрыть (Close).
  8. На панели с управляющими кнопками нажмите кнопку с квадратиком, чтобы остановить запись макроса.

Таким образом, мы создали два макроса, позволяющие быстро работать с закладками: по сочетанию клавиш ALT + A вы создаете закладку, а сочетанием ALT + Q вы выбираете и перемещаетесь к вашей закладке в тексте документа.

Добавить закладку

Этот макрос Word добавит закладку:

Sub AddBookmark () ActiveDocument.Bookmarks.Add "easyexcel_net_01" End Sub

Удалить закладку

Этот макрос VBA удалит закладку:

Sub DeleteBookmark () If ActiveDocument.Bookmarks.Exists ("easyexcel_net_01") Then 'нам нужно проверить, существует ли закладка с именем "easyexcel_net_01" в активном документе ActiveDocument.Bookmarks (Index: = "easyexcel_net_01"). Удалить End If End Sub

Перейти к закладке

Этот простой макрос перейдет к закладке:

Sub GoToBookmark () If ActiveDocument.Bookmarks.Exists ("easyexcel_net_01") Then 'нам нужно проверить, существует ли закладка с именем "easyexcel_net_01" в активном выборе документа. GoTo What: = wdGoToBookmark, Name: = "easyexcel_net_01" End If End Sub

Изменить закладку

Этот макрос изменяет содержимое закладки:

Sub ModifyBookmarkContent () 'изменить содержимое закладки' более сложно, потому что изменение содержимого диапазона закладок приведет к удалению закладки Dim oRangeBKM As Range If ActiveDocument.Bookmarks.Exists ("easyexcel_net_01") Затем 'нам нужно проверить, существует ли закладка с именем "easyexcel_net_01" в активной doc 'Определите текущий диапазон закладок и вставьте текст Set oRangeBKM = ActiveDocument.Bookmarks ("easyexcel_net_01"). Range oRangeBKM.Text = "easyexcel.net"' Снова сделайте закладку ActiveDocument.Bookmarks.Add "easyexcel_net_01", oRangeBKM End If End Sub

Это функция изменения закладки:

Sub UpdateBookmarkContent (strBookMarkName As String, strNewText As String) «пригодная для использования» процедура для добавления в Dim oRangeBKM As Range If ActiveDocument.Bookmarks.Exists (strBookMarkName) Затем «нам нужно проверить, существует ли закладка с именем« easyexcel_net_01 »в активном документе» Идентифицировать текущий диапазон закладок и вставьте текст Set oRangeBKM = ActiveDocument.Bookmarks (strBookMarkName) .Range oRangeBKM.Text = strNewText 'Сделайте снова закладку ActiveDocument.Bookmarks.Add strBookMarkName, oRangeBKM End If End Sub

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

Sub CallBookmarkFunction () Вызов UpdateBookmarkContent ("easyexcel_net_01", "easyexcel.net") End Sub

Вы поможете развитию сайта, поделившись страницей с друзьями

I am trying to create a Word document with a very simple word macro. The macro searches for a bookmark that I have placed in the text and then adds a date, 2 weeks into the future, at that location.

But when I create a new document from the template I keep getting bookmark not found. I have been through it loads of times and sometimes the bookmark is there, sometimes its there but not allowing you to click «Go to».

How can I get it to work? I have added a little piece of code to the Document_New() event but that keeps reporting Bookmark not found.

I have the document in a rar-file since my webserver can’t handle .dotm extensions.
Document

How can I make it so that when a new document is produced from this template, the new document has the date, 2 weeks ahead, placed between the 2 bold sections?

Sub Two_Weeks_Ahead()
''# Two_Weeks_Ahead Makro
    Selection.GoTo What:=wdGoToBookmark, Name:="TwoWeeks"
    With ActiveDocument.Bookmarks
        .DefaultSorting = wdSortByName
        .ShowHidden = False
    End With

    Dim dt As Date
    dt = DateAdd("d", 14, DateTime.Now)

    Selection.TypeText Text:=Format(dt, "yyyy-MM-dd")
End Sub

Private Sub Document_New()
    Selection.GoTo What:=wdGoToBookmark, Name:="TwoWeeks"
    With ActiveDocument.Bookmarks
        .DefaultSorting = wdSortByName
        .ShowHidden = False
    End With

    Dim dt As Date
    dt = DateAdd("d", 14, DateTime.Now)

    Selection.TypeText Text:=Format(dt, "yyyy-MM-dd")
End Sub

Аватар-С

1 / 1 / 0

Регистрация: 03.02.2017

Сообщений: 102

1

15.02.2017, 14:49. Показов 12524. Ответов 14

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

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

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub закладки()
        Dim Range As String
        
        With ActiveDocument
            .Bookmarks.Add Name:="ЗПочта", Range:=Selection.Range
            .Bookmarks("ЗПочта").Range.InsertAfter "@"
            
            
            .Bookmarks.Add Range:=Selection.Range, Name:="ЗТел"
            .Bookmarks("ЗТел").Range.Text = "495" & Chr(11)
            .Bookmarks.Add Name:="ЗИсп", Range:=Selection.Range
            .Bookmarks("ЗИсп").Range.Text = "Name" & Chr(11)
        End With
End Sub

Вложения

Тип файла: rar Закладки.rar (41.7 Кб, 15 просмотров)



0



1508 / 478 / 56

Регистрация: 10.04.2009

Сообщений: 8,008

15.02.2017, 19:12

2

Вы не выделяете какой-то текст и закладки вставляются не как Вы ожидаете вида [], а вида I



1



Аватар-С

1 / 1 / 0

Регистрация: 03.02.2017

Сообщений: 102

16.02.2017, 11:10

 [ТС]

3

Здравствуйте Коллеги!
Ципихович Эндрю ! Спасибо за подсказку, она помогла. Я понял что, вначале создаем текст а, потом на него устанавливаем «закладку». Постарался сделать (согласно подсказки), вроде все получилось но, если посмотрите вложенный код. В общем все вставляется, появляется «закладка» с нужным именем прописывается текст но, в конце вставки выдает False/True.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub закладки()
    Dim Range As String
    Dim sИсп, sТел, sПочта 'As String
    sИсп = "Исп.:"
    'sТел = "тел.:"
    'sПочта = "эл.почта:"
    
    ActiveDocument.ActiveWindow.View.SeekView = wdSeekCurrentPageFooter
        Selection.Range.Text = Selection.Range.Text = sИсп '& Chr(13) & sТел & Chr(13) & sПочта
        Selection.Text = sИсп
        ActiveDocument.Bookmarks.Add Name:="ЗИсп" 'Range:=Selection.Range - что то здесь не так!
    ActiveDocument.ActiveWindow.View.SeekView = wdSeekMainDocume
End Sub

Извините, пожалуйста! Можно еще под сказочку? Пожалуйста…



0



Ципихович Эндрю

1508 / 478 / 56

Регистрация: 10.04.2009

Сообщений: 8,008

16.02.2017, 12:10

4

блин а колонтитулы тут при чем?
что-то написать где курсор

Visual Basic
1
 Selection.TypeText Text:="123:123"

в Вашем случае нужно писать

Visual Basic
1
Dim sИсп  As String

— чтобы меньше памяти тратить



0



1 / 1 / 0

Регистрация: 03.02.2017

Сообщений: 102

16.02.2017, 12:23

 [ТС]

5

Ципихович Эндрю !
Закладки нужны в колонтитулах, это экспериментальный текст, задумку можно посмотреть в приложенном файле. False не пропал.



0



Ципихович Эндрю

1508 / 478 / 56

Регистрация: 10.04.2009

Сообщений: 8,008

16.02.2017, 12:30

6

мама родная — такая штука называется сетка-отметка об исполнителе

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 Documents.Add DocumentType:=wdNewBlankDocument
    Selection.Font.Size = 11
    'напечатать абзацы в количестве ... штук
    Selection.TypeText String(50, vbCr)
   
        setka = _
        "отп. 2 экз." & vbCrLf & _
                "1 - в адрес" & vbCrLf & _
                "2 - в дело (" & sood & ")" & vbCrLf & _
                "исп." & user_initials & user_f & vbCrLf & _
                phone_user & vbCrLf & _
                Format(Date, "dd.mm.yyyy")
Selection.TypeText Text:=setka
    'выделить всё
    Selection.WholeStory
    Application.PrintOut FileName:="", Range:=wdPrintSelection, Item:=wdPrintDocumentContent, Copies:=count_copies, Pages:="", PageType:=wdPrintAllPages, _
                         ManualDuplexPrint:=False, Collate:=True, Background:=True, PrintToFile:=False, PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _
                         PrintZoomPaperHeight:=0
    'Copies:= ... - печать копий ... штук (штуки)
    ActiveWindow.Close False



0



1 / 1 / 0

Регистрация: 03.02.2017

Сообщений: 102

16.02.2017, 12:43

 [ТС]

7

Ципихович Эндрю!
Все верно, эта штука нужна в колонтитуле (чтоб ее не сносили, каждый раз — девчонки), с переходом на последнюю страницу документа.
False — можно что то сделать?



0



Step_UA

1588 / 661 / 225

Регистрация: 09.06.2011

Сообщений: 1,334

16.02.2017, 16:01

8

Цитата
Сообщение от Аватар-С
Посмотреть сообщение

False — можно что то сделать?

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

Visual Basic
1
Selection.Range.Text = sИсп



0



Аватар-С

1 / 1 / 0

Регистрация: 03.02.2017

Сообщений: 102

16.02.2017, 17:03

 [ТС]

9

Спасибо Step_UA!
Я, заметил ошибку, теперь другая беда.

первый код создает все как нужно.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub закладки()
    Dim Range As String
    Dim sИсп As String, sТел As String, sПочта As String
    sИсп = "Исп.: И.О.Фамилия"
    
    ActiveDocument.ActiveWindow.View.SeekView = wdSeekCurrentPageFooter
            Selection.Text = sИсп & Chr(13)
            ActiveDocument.Bookmarks.Add Name:="ЗИсполнитель", Range:=Selection.Range
     ActiveDocument.ActiveWindow.View.SeekView = wdSeekMainDocume
    'ActiveDocument.Bookmarks("ЗИсполнитель").Range.Text = "5"
End Sub

а второй перезаписывает закладки, остается последняя

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub закладки()
    Dim Range As String
    Dim sИсп As String, sТел As String, sПочта As String
    sИсп = "Исп.: И.О.Фамилия"
    sТел = "тел.: +7 (000) 000 - 0000 | 0 - 00"
    sПочта = "эл.почта: [email]name@site.ru[/email]"
    
    ActiveDocument.ActiveWindow.View.SeekView = wdSeekCurrentPageFooter
    'Selection.Text = sИсп & Chr(13) & sТел & Chr(13) & sПочта '& vbNewline
            Selection.Text = sИсп & Chr(13)
            ActiveDocument.Bookmarks.Add Name:="ЗИсполнитель", Range:=Selection.Range
            Selection.Text = sТел
            ActiveDocument.Bookmarks.Add Name:="ЗТелефон", Range:=Selection.Range
            Selection.Text = sПочта
            ActiveDocument.Bookmarks.Add Name:="ЗПочта", Range:=Selection.Range
     ActiveDocument.ActiveWindow.View.SeekView = wdSeekMainDocume
    'ActiveDocument.Bookmarks("ЗИсполнитель").Range.Text = "5"
End Sub

Что делать?



0



1588 / 661 / 225

Регистрация: 09.06.2011

Сообщений: 1,334

16.02.2017, 17:51

10

Цитата
Сообщение от Аватар-С
Посмотреть сообщение

Что делать?

1) При полной замене текста закладки она удаляется
2) Диаппазон выделения не изменяется — подряд перезаписываете данные
В целом если место вставки данных известно, то зачем закладки? … ну и работа через Selection только тормозит — используйте диаппазоны



0



1 / 1 / 0

Регистрация: 03.02.2017

Сообщений: 102

16.02.2017, 18:10

 [ТС]

11

Извините диапазон имеется ввиду Range?

Добавлено через 1 минуту

Цитата
Сообщение от Step_UA
Посмотреть сообщение

используйте диаппазоны

Извините диапазон имеется ввиду Range?



0



Ципихович Эндрю

1508 / 478 / 56

Регистрация: 10.04.2009

Сообщений: 8,008

16.02.2017, 18:13

12

да —

Visual Basic
1
Dim rRange As Range



0



Аватар-С

1 / 1 / 0

Регистрация: 03.02.2017

Сообщений: 102

01.03.2017, 17:03

 [ТС]

13

Здравствуйте Коллеги!
Еще раз Спасибо! Ципихович Эндрю и Step_UA

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

  • нижний колонтитул должен отображаться на последней странице документа с выравнивание по правому краю (формула);
  • вставленный текст формируется в закладку для последующей проверки (при печати);
  • верхний колонтитул появляется со второй страницы с выравниванием по центру;
  • соответственно верхний и нижний колонтитулы форматируются по размеру текста и шрифту.

Получился следующий код состоящий из двух процедур:

ИСПОЛНИТЕЛЬ:

Кликните здесь для просмотра всего текста

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
Sub ИСПОЛНИТЕЛЬ()
 
'Верхний колонтитул
    ActiveDocument.ActiveWindow.View.SeekView = wdSeekCurrentPageHeader
    
    'убрать параметр "Как в предыдущем разделе" (отменяется параметр по умолчанию):
    Selection.HeaderFooter.LinkToPrevious = Not Selection.HeaderFooter.LinkToPrevious
    
    'отключаем особый колонтитул для первой страницы:
    ActiveDocument.PageSetup.DifferentFirstPageHeaderFooter = False '[False] [True]
    
    'удалем значения верхнего колонтитула для последующих страниц
    ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
    Selection.WholeStory
    Selection.Delete Unit:=wdCharacter, Count:=1
    ActiveDocument.PageSetup.DifferentFirstPageHeaderFooter = True
    
    'отключаем особые колонтитулы разделов
    For i = 1 To ActiveDocument.Sections.Count
    If i > 1 Then
        Set oRange = ActiveDocument.Sections(i).Range
        ActiveDocument.Sections(i).PageSetup.DifferentFirstPageHeaderFooter = False
    End If
    Next
    
    'вставляем нумерацию последуюзих страниц
    Selection.Sections(1).Headers(3).PageNumbers.Add PageNumberAlignment:=wdAlignPageNumberCenter, FirstPage:=False
        With ActiveDocument.Sections(1).Headers(3).Range    '1 wdHeaderFooterPrimary     все к. кроме первой страницы документа или раздела
            .Font.Name = "TimesNewRoman"
            .Font.Size = 12
            .ParagraphFormat.Alignment = wdAlignParagraphCenter
        End With
    ActiveDocument.ActiveWindow.View.SeekView = wdSeekMainDocume
    
'Нижний колонтитул
    Dim sВсе As String
        sИсп = "Исп.: И.О.Фамилия" & Chr(11)
        sТел = "тел.: +7 (000) 000 - 0000 | 0 - 00" & Chr(11)
        sПочта = "эл.почта: [email]name@site.ru[/email]"
        sВсе = sИсп & sТел & sПочта
    ActiveDocument.ActiveWindow.View.SeekView = wdSeekCurrentPageFooter
    
    'удаляем нижний колонтитул
    ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter
    Selection.WholeStory
    Selection.Delete Unit:=wdCharacter, Count:=1
    
    'переменные
    ActiveDocument.ActiveWindow.View.SeekView = wdSeekCurrentPageFooter
    Dim fld As Field
    Dim myFR As Word.Range
    
    'формула перехода данных на последнюю страницу документа
    Set fld = Selection.Fields.Add(Range:=Selection.Range)
        fld.Code.Text = "IF"
    Set myFR = fld.Code
        myFR.SetRange Start:=fld.Code.End, End:=fld.Code.End
        fld.Code.Fields.Add Range:=myFR, Text:="PAGE"
        myFR.SetRange Start:=fld.Code.End, End:=fld.Code.End
        myFR.Text = "="
        myFR.SetRange Start:=fld.Code.End, End:=fld.Code.End
        fld.Code.Fields.Add Range:=myFR, Text:="NUMPAGES"
        myFR.SetRange Start:=fld.Code.End, End:=fld.Code.End
    
    'вставляем закладку
        myFR.Text = """" & sВсе & """"
        myFR.Bookmarks.Add ("Исполнитель")
        
    'форматирование результата исполнитель
        Word.ActiveDocument.Sections(1).Footers(2).Range.Select    '3 wdHeaderFooterEvenPages   все к. даже на пронумерованных статьях
        With ActiveDocument.Sections(1).Footers(2).Range           '2 wdHeaderFooterFirstPage   первый к. в документе или разделе
            .Font.Name = "TimesNewRoman"                           '1 wdHeaderFooterPrimary     все к. кроме первой страницы документа или раздела
            .Font.Size = 9
            .ParagraphFormat.Alignment = wdAlignParagraphLeft
        End With
        Word.ActiveDocument.Sections(1).Footers(1).Range.Select
        With ActiveDocument.Sections(1).Footers(1).Range
            .Font.Name = "TimesNewRoman"
            .Font.Size = 9
            .ParagraphFormat.Alignment = wdAlignParagraphLeft
        End With
    
    'скрыть/показать формулу кода полей False/True
    ActiveDocument.ActiveWindow.View.ShowFieldCodes = False
    ActiveDocument.ActiveWindow.View.SeekView = wdSeekMainDocume
    Selection.Fields.Update
 
End Sub

ПРОВЕРКА ИСПОЛНИТЕЛЯ:

Кликните здесь для просмотра всего текста

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub ПРОВЕРКА_ИСПОЛНИТЕЛЯ()
    
    'проверка исполнителя
    Dim SearchString, SearchChar, MyPos
        fИсп = "Исп.: И.О.Фамилия"
        fТел = "тел.: +7 (000) 000 - 0000 | 0 - 00"
        fПочта = "эл.почта: [email]name@site.ru[/email]"
        Где = ActiveDocument.Bookmarks.Item("Исполнитель").Range
        Что = fИсп ' в архиве нужно будет исправить
 
    Проверяем = InStr(Где, Что)
    If Проверяем > 0 Then
        MsgBox "Исполнитель в документе:" _
           & vbCrLf & "      " & fИсп _
           & vbCrLf & "      " & fТел _
           & vbCrLf & "      " & fПочта, 64
    Else
        MsgBox "Исполнитель в документе и установке программы не соответствуют проверке!", 48
        End If
 
End Sub

Буду признателен за Ваши замечания!
С уважением Аватар-С

Вложения

Тип файла: rar ПРОВЕРКА_ИСПОЛНИТЕЛЯ.rar (26.7 Кб, 31 просмотров)



0



1508 / 478 / 56

Регистрация: 10.04.2009

Сообщений: 8,008

01.03.2017, 17:23

14

а так-то лучше не закладка-так как её можно удалить а вариаблес-тоже можно удалить, но сложнее



0



1 / 1 / 0

Регистрация: 03.02.2017

Сообщений: 102

01.03.2017, 17:33

 [ТС]

15

Ципихович Эндрю

Цитата
Сообщение от Ципихович Эндрю
Посмотреть сообщение

а так-то лучше не закладка-так как её можно удалить а вариаблес-тоже можно удалить, но сложнее

Извините пожалуйста, не совсем понял почему вариаблес?



0



В статье «Урок 79. Смотри таблицу» я рассказала, как установить закладку в тексте документа:

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

Хорошо бы, чтобы в документе были бы закладки, лично нами назначенные и хорошо нам знакомые.

Но будьте готовы к тому, что:

  • когда вы скачиваете документ из системы «КонсультантПлюс»
  • когда вы распознаете документ, а потом передаете его в Word

то, закладки в документе будут в немалом количестве – 100 и больше.

Поэтому встанет вопрос: как организовать удаление всех закладок?

По окончании этого урока вы сможете:

  1. Использовать закладку для навигации по документу
  2. Написать макрос «Удаление всех закладок»

1. Навигация по документу при помощи закладок

Шаг 1. Лента Главная → группа команд Редактирование → команда Найти → команда Перейти из выпадающего меню:

Удаление всех закладок

Появляется рабочее окно «Найти и заменить»

Шаг 2. Кнопка выпадающего меню поля Найти имя закладки → выбор нужного имени в выпадающем меню:

Удаление всех закладок

Обратите внимание на это окно. В правой части находится поле «Объект перехода». Если вы пройдетесь по полосе прокрутки, то список объектов перехода будет таким:

  1. Страница
  2. Раздел
  3. Строка
  4. Закладка
  5. Примечание
  6. Сноска
  7. Концевая сноска
  8. Поле
  9. Таблица
  10. Рисунок
  11. Уравнение
  12. Объект
  13. Заголовок

С маленькими документами вы обойдётесь без переходов по этим объектам. Но с документом в 50 страниц и выше команда «Перейти» помогает мне даже очень. Например: мне надо убедиться, что я не пропустила ни одной таблицы для форматирования. Или: все ли рисунки стоят на своих местах?

2. Макрос «Удаление всех закладок» в документе

А теперь рассмотрим ситуацию: документ с большим количеством закладок (я работаю со своим документом).

Шаг 1. Лента Вставка → группа команд Ссылки → команда Закладка:

Удаление всех закладок

Теперь вы можете поочередно выбирать имя закладки в списке и нажимать ЛМ команду «Удалить». И так 250 раз. По моим прикидкам именно такое количество закладок есть в этом документе.

Скачайте документ тут и откройте его. Посмотрите, сколько там закладок:

Удаление всех закладок

Вроде и немного, но удалять поодиночке все равно надоест. Так что приступим к созданию макроса «Удаление всех закладах» в документе.

Скопируйте целиком текст в рамке:

 Sub delAllbookmarks()
 Dim oBkm As Bookmark
 For Each oBkm In ActiveDocument.Range.Bookmarks
    oBkm.Delete
 Next
End Sub

В статье «Урок 60. Макрос для таблицы» я показала, как извлечь ленту «Разработчик». Так как я много работаю с полями для того, чтобы делать автоматизированные шаблоны (статья «Урок 89. Шаблон договора»), то эта лента у меня всегда под рукой.

Шаг 2. Лента Разработчик → группа команд Код → команда Макросы:

лента Разработчик в Word

Шаг 3. В диалоговом окне «Макрос» введите имя макроса → только тогда команда «Создать будет активна и позволит вам создать новый макрос:

макрос в Word

Имя для макроса должно быть уникальным. К имени макроса предъявляются два требования:

  1. Имя должно начинаться с буквы!
  2. Имя не должно содержать пробелов!

После нажатия ЛМ команды «Создать» появляется окно «Microsoft Visual Basic for Applications»:

макрос в Word

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

Шаг 4. Удалите в поле «Normal — NewMacros (Code)» все содержимое кнопкой Delete с клавиатуры.

макрос в Word

Шаг 5. Вставьте содержимое буфера обмена в поле «Normal — NewMacros (Code)» нажатием сочетания клавиш Ctrl+V:

Закройте окно «Microsoft Visual Basic for Applications» нажатием ЛМ по крестику в правом верхнем углу.

Шаг 6. Теперь выполняем макрос (лента Разработчик → группа команд Код → команда Макросы → команда Выполнить):

Удаление всех закладок

Обратите внимание, что в поле «Имя» нет имени, который мы вводили. Объяснение простое: на шаге 4 мы его удалили. И еще один вывод:

Sub delAllbookmarks() Имя макроса
Dim oBkm As Bookmark
For Each oBkm In ActiveDocument.Range.Bookmarks
   oBkm.Delete
Next
End Sub Окончание работы макроса

Оставьте заметочку в памяти – эта информация еще пригодиться

В статье «Урок 60. Макрос для таблицы» я рассказала, как поместить кнопку запуска макроса на Панель быстрого доступа.

Макрос «Удаление всех закладок» в документе будет доступен вам при работе любым документом.

Теперь вы сможете:

  1. Использовать закладку для навигации по документу
  2. Написать макрос «Удаление всех закладок» 

Add Bookmark

This Word macro will add a bookmark:

Sub AddBookmark()
    ActiveDocument.Bookmarks.Add "automateexcel_com_01"
End Sub

Delete Bookmark

This VBA macro will delete a bookmark:

Sub DeleteBookmark()
    If ActiveDocument.Bookmarks.Exists("automateexcel_com_01") Then    'we need to check if bookmark named "automateexcel_com_01" exists in active doc
        ActiveDocument.Bookmarks(Index:="automateexcel_com_01").Delete
    End If
End Sub

Go To Bookmark

This simple macro will go to a bookmark:

Sub GoToBookmark()
    If ActiveDocument.Bookmarks.Exists("automateexcel_com_01") Then    'we need to check if bookmark named "automateexcel_com_01" exists in active doc
        Selection.GoTo What:=wdGoToBookmark, Name:="automateexcel_com_01"
    End If
End Sub

Modify Bookmark

This macro will modify a bookmark’s content:

Sub ModifyBookmarkContent()
' change bookmark contents
' more complicated, because changing bookmark range content will delete bookmark
    Dim oRangeBKM As Range

    If ActiveDocument.Bookmarks.Exists("automateexcel_com_01") Then    'we need to check if bookmark named "automateexcel_com_01" exists in active doc
        'Identify current Bookmark range and insert text
        Set oRangeBKM = ActiveDocument.Bookmarks("automateexcel_com_01").Range
        oRangeBKM.Text = "automateexcel.com"
        'Make again the bookmark
        ActiveDocument.Bookmarks.Add "automateexcel_com_01", oRangeBKM
    End If
End Sub

This is a modify bookmark function:

Sub UpdateBookmarkContent(strBookMarkName As String, strNewText As String)
' "usable' procedure for add in
    Dim oRangeBKM As Range

    If ActiveDocument.Bookmarks.Exists(strBookMarkName) Then    'we need to check if bookmark named "automateexcel_com_01" exists in active doc
        'Identify current Bookmark range and insert text
        Set oRangeBKM = ActiveDocument.Bookmarks(strBookMarkName).Range
        oRangeBKM.Text = strNewText
        'Make again the bookmark
        ActiveDocument.Bookmarks.Add strBookMarkName, oRangeBKM
    End If
End Sub

You can call the function by adding the bookmark name and new text as arguments:

Sub CallBookmarkFunction()

    Call UpdateBookmarkContent("automateexcel_com_01", "automateexcel.com")

End Sub

Понравилась статья? Поделить с друзьями:
  • Word заканчивает работу сам
  • Word задать язык текста
  • Word задать формат числа
  • Word задать размеры ячеек
  • Word задать размеры страницы