Макросы word для колонтитулов

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

Когда в документе нет специального колонтитула первой страницы, то макрос выполняется нормально, и на каждой странице выходит правильный колонтитул.
Когда же в документе вставлена нумерация страниц и она отображается со второй станице, начинается путаница.
Подскажите как чтобы и при специальном колонтитуле первой страницы, текст в колонтитулах был верным
Спасибо!

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
89
90
91
92
93
94
95
96
97
98
99
Sub Макрос1()
'
' Макрос1 Макрос
' Макрос записан 15.05.2013 rabotnik
'
Dim hfRange As Range 'диапазон колонтитулов
Dim str As String
Dim Sec As String
Dim Sec1 As String
 
Set hfRange = ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).Range
 
With hfRange
.Delete
 
Sec1 = Shriftdata
.Fields.Add Range:=hfRange, Text:="DATE  @ dd.MM.yyyy"
Sec = Slesh
.Fields.Add Range:=hfRange, Text:="FILENAME  p" 'поле пути и имени файла
str = Ispolnit
 
End With
 
ActiveDocument.ActiveWindow.View.ShowFieldCodes = False  'скрываем коды полей, если они отображались
ActiveWindow.View.Type = wdPrintView    'переключаемся в режим Разметка страницы
 
End Sub
 
Function Ispolnit()
 
 
    If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
        ActiveWindow.Panes(2).Close
    End If
    If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
        ActivePane.View.Type = wdOutlineView Then
        ActiveWindow.ActivePane.View.Type = wdPrintView
    End If
    ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
    If Selection.HeaderFooter.IsHeader = True Then
        ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter
    Else
        ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
    End If
    Selection.TypeText Text:="ОтделФамилия И.О."
    Selection.MoveLeft Unit:=wdCharacter, Count:=100000, Extend:=wdExtend
    Selection.Font.Name = "Times New Roman"
    Selection.Font.Size = 8
    ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
 
End Function
 
Function Slesh()
'
'
'
    If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
        ActiveWindow.Panes(2).Close
    End If
    If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
        ActivePane.View.Type = wdOutlineView Then
        ActiveWindow.ActivePane.View.Type = wdPrintView
    End If
    ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
    If Selection.HeaderFooter.IsHeader = True Then
        ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter
    Else
        ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
    End If
    Selection.TypeText Text:=""
    Selection.MoveLeft Unit:=wdCharacter, Count:=100000, Extend:=wdExtend
    Selection.Font.Name = "Times New Roman"
    Selection.Font.Size = 8
    ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
End Function
 
Function Shriftdata()
'
'
'
    If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
        ActiveWindow.Panes(2).Close
    End If
    If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
        ActivePane.View.Type = wdOutlineView Then
        ActiveWindow.ActivePane.View.Type = wdPrintView
    End If
    ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
    If Selection.HeaderFooter.IsHeader = True Then
        ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter
    Else
        ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
    End If
    Selection.TypeText Text:=""
    Selection.MoveLeft Unit:=wdCharacter, Count:=100000, Extend:=wdExtend
    Selection.Font.Name = "Times New Roman"
    Selection.Font.Size = 8
    ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
End Function

Добавлено через 19 часов 1 минуту
т.е. мне надо чтобы этот макрос выполнялся с первой страницы
и нумерация страниц, но номера на первой странице не было

I have only basic VBA experince and my prior Macro experence was primarily with WORD 2003. Recording Macros used to take GoToFooter (or Edit Footer) Menu Commands and allow subsequent editing. In WORD 2010, this (and many other) commands do not «record» to the Macro (yet when in Record mode, I do get into Edit Footer function).

A research of various VBS options shows several ways to create Footers and to make global Footer setting changes within Macro. However If I simply want to Revise the Company name within the Footer (for example), I can find no way to do this within a Macro subroutine.

This subroutine is one that I would call from the Main Macro that is stepping through each file in a Folder (& subfolders). I have the main Macro functioning.

Does WORD 2010 Macro-VBA preclude simple Edit-Footer function?

Thanks in advance

So, thanks to Issun, here is my solution:

`
Sub Sub_FTR_0()
'
ActiveDocument.ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter

For i = 1 To ActiveDocument.Sections.Count
 'REM: INSERT Code from RECORD MACRO recorded when editing one Footer correctly
    Selection. [[xxx]], etc.

If i = ActiveDocument.Sections.Count Then GoTo Line1

    ActiveDocument.ActiveWindow.ActivePane.View.NextHeaderFooter

Line1:
Next

    ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument

End Sub
`

Алена задала вопрос:

Как вставить колонтитулы на нечетных страницах документа?

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

Вот примеры макросов, позволяющие реализовать эти два способа.

Sub insertHFoddPages()
'Вставка нижнего колонтитула на нечетные страницы 
'в первом разделе документа
Dim str As String
str = "Текст нижнего колонтитула на нечетной странице"
ActiveDocument.PageSetup.OddAndEvenPagesHeaderFooter = True 
ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).Range.text = str
End Sub

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

Sub insertHFoddPages2()
'Вставка нижнего колонтитула 
'на нечетных страницах во всех разделах документа
Dim str As String
Dim Sec As Section
str = "Текст нижнего колонтитула на нечетной странице"
ActiveDocument.PageSetup.OddAndEvenPagesHeaderFooter = True
For Each Sec In ActiveDocument.Sections
    Sec.Footers(wdHeaderFooterPrimary).Range.Text = str
Next Sec
End Sub

сделать в Ворде макросом колонтитул нижний

Автор Ципихович Эндрю, 04 февраля 2017, 13:31

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

  • гость
  • Записан

Здравствуйте, как сделать в Ворде макросом, чтобы в конце страницы последней строкой было, например
___________ А.А. Петров?

Эта вещь вроде колонтитулы нижние называется, но не сталкивался.



Администратор

  • Administrator
  • Сообщения: 2,254
  • Записан

Вставка текста в первый раздел, в нижний основной колонтитул:
Sub Макрос()
    ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).Range.Text = «___________ А.А. Петров»
End Sub

Примечания

  • Колонтитулы есть в каждом разделе файла. Поэтому, если у вас несколько разделов в файле, то может потребоваться вставлять колонтитулы не в один раздел, а в несколько.
  • Колонтитулы есть трёх видов:
    1) основной  — wdHeaderFooterPrimary
    2) колонтитул первой страницы раздела (именно раздела, а не всего файла) — wdHeaderFooterFirstPage
    3) колонтитул чётной страницы — wdHeaderFooterEvenPages
    Поэтому это нужно помнить. Например, если вы вставили колонтитул, а его не видно, значит в файле нет какого-то колонтитула.


  • Форум по VBA, Excel и Word

  • Word

  • Макросы в Word

  • сделать в Ворде макросом колонтитул нижний

Колонтитулы — программное изменение

zoman
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 10.06.2005 (Пт) 9:19

Колонтитулы — программное изменение

Как можно изменить имеющиеся верхние колонтитулы (произвольный текст + № страницы) для Word с помощью VBA?


uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя

 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 10.06.2005 (Пт) 9:38

Запиши макрос, сделай в нем мышкой все действия, потом посмотри его текст.


zoman
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 10.06.2005 (Пт) 9:19

Сообщение zoman » 10.06.2005 (Пт) 9:45

Запиши макрос, сделай в нем мышкой все действия, потом посмотри его текст.

А ты сам так пробовал?

После выполнения он делает там где установлен курсор :shock:


uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя

 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 10.06.2005 (Пт) 9:50

Мда, забыл, что в ворде макросы хреновастенько записываются… Я по ворду не специалист, если будет время, посмотрю.


RayShade
Scarmarked
Scarmarked
Аватара пользователя

 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg
  • Сайт
  • ICQ

Сообщение RayShade » 10.06.2005 (Пт) 10:05

Нечего на Ворд пенять, коли голова не включается. Понятное дело, что он запишет для Selection макрос. Так его надо модифицировать самому потом уже.


uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя

 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 10.06.2005 (Пт) 11:19

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


zoman
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 10.06.2005 (Пт) 9:19

Сообщение zoman » 10.06.2005 (Пт) 11:44

Вот так добавляем колонтитул:

Word.Document.Sections(1).Headers(1).Range.Text = «TEST»

Вот так добавляем к существующему колонтитулу:

Word.Document.Sections.Item(1).Headers.Item(1).Range.InsertBefore «TEST»

А мне надо еще варианты, типа как создать полный колонтитул с номером страницы, датой и временем…


zoman
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 10.06.2005 (Пт) 9:19

Решил…

Сообщение zoman » 14.06.2005 (Вт) 9:54

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

В колонтитулах то, что надо менять — сделал полями.

Нюанс:

Word.Document.Fields.Update — обновляет поля для документа.

Word.Document.Sections(1).Headers(1).Range.Fields.Update — ОБНОВЛЯЕТ ПОЛЯ ДЛЯ КОЛОНТИТУЛОВ!!!



Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Понравилась статья? Поделить с друзьями:
  • Макросы word для книги
  • Макросы в excel вставка картинки
  • Макросы word абзац это
  • Макросы в excel для чайников с примерами книга скачать
  • Макросы в excel вставить значение