Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 28.10.2012
Сообщений: 251
1

Выгрузка макросом в колонтитулы

03.02.2017, 10:30. Показов 557. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть макрос: в excel заполняется таблица с данными, затем это при помощи макроса выгружается в шаблон ворда, и вот проблема он не вставляет информацию в колотитулы, почему так?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.02.2017, 10:30
Ответы с готовыми решениями:

Выгрузка макросом информации из Excel в тектовый формат в кодировке СР866
Уважаемые форумчане, добрый день! Помогите, пожалуйста дилетанту добить задачу - дописать макрос,...

Колонтитулы разделов с 1 | Word
Здравствуйте Коллеги! Прошу помочь в следующей ситуации. Из начально документ имеет один...

Экспорт из Excel в Word колонтитулы
Добрый день уважаемые Гуру VBA. Подскажите пожалуйста, как заменить текст в колонтитулах Word из...

Удалить все колонтитулы в Ворд документе
Здравствуйте, как? три строка кода плиз

2
5606 / 1592 / 412
Регистрация: 23.12.2010
Сообщений: 2,382
Записей в блоге: 1
03.02.2017, 11:20 2
Очевидно, что неправильно обращаетесь к колонтитулу.
Пример для Word
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub Перебор_колонтитулов_в_разделах()
    Dim i%
    With ActiveDocument
        For i = 1 To .Sections.Count
            If .Sections(i).Headers(wdHeaderFooterFirstPage).Exists = True Then
                '  ...
            End If
            If .Sections(i).Headers(wdHeaderFooterPrimary).Exists = True Then
                '  ...
            End If
            If .Sections(i).Footers(wdHeaderFooterFirstPage).Exists = True Then
                '  ...
            End If
            If .Sections(i).Footers(wdHeaderFooterPrimary).Exists = True Then
                '  ...
            End If
        Next i
    End With
End Sub
0
1 / 1 / 0
Регистрация: 28.10.2012
Сообщений: 251
03.02.2017, 11:43  [ТС] 3
KoGG, Вопрос куда его впихнуть?

Добавлено через 9 минут
Attribute VB_Name = "Module1"
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
Sub АЖ()
'Формируем Заключки
    Const ИмяФайлаШаблона = "ДОП_СОГЛ.docx"
    Const КоличествоОбрабатываемыхСтолбцов = 90
    Const РасширениеСоздаваемыхФайлов = ".docx"
    
    ПутьШаблона = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "Шаблоны" & ИмяФайлаШаблона)
    НоваяПапка = NewFolderName & Application.PathSeparator
    Dim row As Range
    Dim rownumber, index As Integer
    Dim DocumentNumber As Integer
    Dim GosbValue, NumberOfRow As String
    Dim i%
   
    Dim EndOfBlock As Integer
    Dim ILastRow As Long
    Dim A(1 To 8) As Integer
    Dim GOSB(1 To 7) As String
    Dim length As Integer
    Dim BlockLength(1 To 7) As Integer
    Dim Start(1 To 7) As Integer
    
 
    
If FindList("Итог для слияния") = False Then
msg = "Листа Итог для слияния не существует"
MsgBox msg, vbExclamation, "Добавьте данные"
Exit Sub
Else: Sheets("Итог для слияния").UsedRange.Value = Sheets("Итог для слияния").UsedRange.Value
End If
 
 
For j = 1 To 400
For i = 1 To 1000
    If CStr(Cells(i, j).Value) = "#ССЫЛКА!" Then
     msg = "В одной или нескольких ячейках содержится ошибка типа #ССЫЛКА! исправьте основной лист с данными и разбейте на листы с помощью PLEX заново."
    MsgBox msg, vbExclamation, "Ошибка в шаблоне"
    Exit Sub
    End If
Next i
Next j
          
    
Sheets("Итог для слияния").Select
ILastRow = Cells(Rows.Count, "C").End(xlUp).row ': rc = r - 2
If ILastRow = 1 Then
msg = "На листе Итог для слияния нет данных!"
MsgBox msg, vbExclamation, "Добавьте данные"
Exit Sub
End If
    
msg = "Запущено формирование файлов. Пожалуйста, подождите"
MsgBox msg, vbInformation, "Внимание"
Application.Cursor = xlWait  'xlNorthwestArrow  'xlIBeam
 
oldStatusBar = Application.DisplayStatusBar
 
Application.DisplayStatusBar = True
Application.StatusBar = "Доп. соглашения создаются, подождите..."
 
    
    rownumber = 2
    EndOfBlock = 0
    
    'ILastRow = ActiveSheet.UsedRange.Rows.Count
     
 
    
    index = 0
 
'шапка и сортировка
' Sheets("Итог для слияния").Rows("1:1").Delete
' Sheets("Шапка").Rows("1:1").Copy
 Sheets("Итог для слияния").Select
  'ActiveWindow.SmallScroll Down:=-21
    Cells.Select
    Selection.AutoFilter
    ActiveWorkbook.Worksheets("Итог для слияния").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Итог для слияния").Sort.SortFields.Add Key:=Range( _
        "C2:C501"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortTextAsNumbers
    ActiveWorkbook.Worksheets("Итог для слияния").Sort.SortFields.Add Key:=Range( _
        "O2:O501"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Итог для слияния").Sort
        .SetRange Range("A1:CQ501")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
'добавили шапку на лист, сделали сортировку
 
 
For rownumber = 2 To ILastRow
    Do Until EndOfBlock <> 0
        If Cells(rownumber, 3).Value = Cells(rownumber + 1, 3).Value And _
        (Cells(rownumber, 3).Value = "8610" Or _
        Cells(rownumber, 3).Value = "8611" Or _
        Cells(rownumber, 3).Value = "8612" Or _
        Cells(rownumber, 3).Value = "8613" Or _
        Cells(rownumber, 3).Value = "8614" Or _
        Cells(rownumber, 3).Value = "8589" Or _
        Cells(rownumber, 3).Value = "9042") Then
        rownumber = rownumber + 1
        
        Else:
        index = index + 1
        EndOfBlock = rownumber
        A(index) = EndOfBlock
        GOSB(index) = Cells(rownumber, 6).Value
        
            If index = 1 Then
            Start(index) = 2
            BlockLength(index) = A(index) - Start(index) + 1
        
            Else:
            Start(index) = A(index - 1) + 1
            BlockLength(index) = A(index) - Start(index) + 1
            
            End If
         End If
    Loop
 
    If index <= 6 Then EndOfBlock = 0
Next rownumber
    
''''''Здесь и далее создание файлов word
Sheets("Итог для слияния").Select
    r = Cells(Rows.Count, "C").End(xlUp).row: rc = r - 1
    If rc < 1 Then MsgBox "Строк для обработки не найдено", vbCritical: Exit Sub
    If rc > 500 Then MsgBox "Строк для обработки больше 500, удалите лишние строки", vbCritical: Exit Sub
    
 For index = 1 To 7 Step 1
    Dim WA As Object, WD As Object: Set WA = CreateObject("Word.Application")
    
    ИмяФайла = GOSB(index) & " ДОП.СОГЛ " & BlockLength(index)
    Filename = НоваяПапка & ИмяФайла & РасширениеСоздаваемыхФайлов
    DocumentNumber = 0
    
        Set WD = WA.documents.Add(ПутьШаблона): DoEvents
   
        With WA
            .Selection.WholeStory
            .Selection.Copy
        End With
 
    startrow = "" & Val(Start(index)) & ":"
    If startrow = "0:" Then GoTo Point: 'цикл выполняться дальше не должен
    
    Application.StatusBar = "Создаются доп. соглашения для " & GOSB(index) & ", подождите..."
    For Each row In ActiveSheet.Rows(startrow & CStr(A(index)))
        With row
            
            DocumentNumber = DocumentNumber + 1
            
             
            For i = 1 To КоличествоОбрабатываемыхСтолбцов
            FindText = Cells(1, i): ReplaceText = Trim$(.Cells(i))
            Application.StatusBar = "Замена данных для " & GOSB(index) & " в шаблоне, подождите...сейчас заменяются данные " & Cells(i, 15)
                
                With WD.Range.Find
                    .Text = FindText
                    .Replacement.Text = ReplaceText
                    .Forward = True
                    .Wrap = 1
                    .Format = False: .MatchCase = False
                    .MatchWholeWord = False
                    .MatchWildcards = False
                    .MatchSoundsLike = False
                    .MatchAllWordForms = False
                    .Execute Replace:=2
                End With
                DoEvents
            Next i
            
            If DocumentNumber < BlockLength(index) Then
            
            With WA
               .Selection.EndOf
               .Selection.InsertBreak
               .Selection.StartOf
               .Selection.PasteAndFormat (wdFormatOriginalFormatting)
            End With
            End If
            
            
            WD.SaveAs Filename:
            
        End With
              
    Next row
    
    Application.StatusBar = "Сохранение файла Word для " & GOSB(index) & " подождите..."
Point:
 'разбивка по ГОСБам
    
    WD.Close False: DoEvents
    
    WA.Quit False:
 
Next index
Application.Cursor = xlDefault
End If
Next i
End With
Application.StatusBar = False
Application.DisplayStatusBar = oldStatusBar
 
    msg = "Доп. соглашения сформированы! Документы находятся в папке " & vbNewLine & НоваяПапка
    MsgBox msg, vbInformation, "Готово"
    
End Sub
 
 
Sub ВыделяемЯчейкиСОшибками_2()
    On Error Resume Next
    Set ErrRa = ActiveSheet.UsedRange.Cells.SpecialCells(xlCellTypeFormulas, xlErrors)
    If Not ErrRa Is Nothing Then
        ErrRa.Select    ' выделяем все ячейки с ошибками
        MsgBox "Найдено ошибок в формулах:  " & ErrRa.Cells.Count
    End If
End Sub
 
Public Sub ВернутьКурсор()
Application.Cursor = xlDefault
End Sub
 
 
Public Function FindList(SheetName As String) As Boolean
FindList = False
For i = 1 To Sheets.Count ' Перечисляем листы книги
If Sheets(i).Name = SheetName Then 'Сравниваем имя текущего листа с SheetName
FindList = True
Exit Function
End If
Next i
End Function
 
 
 
Sub DeleteFolder()
Dim fso As Scripting.FileSystemObject
Set fso = New Scripting.FileSystemObject
fso.DeleteFolder (CStr(Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "Доп. соглашения, сформированные " & Get_Date)))
End Sub
 
Function NewFolderName() As String
    NewFolderName = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "Доп. соглашения, сформированные " & Get_Now)
    MkDir NewFolderName
End Function
 
 
Function Get_Date() As String: Get_Date = Replace(Replace(DateValue(Now), "/", "-"), ".", "-"): End Function
Function Get_Time() As String: Get_Time = Replace(TimeValue(Now), ":", "-"): End Function
Function Get_Now() As String: Get_Now = Get_Date & " в " & Get_Time: End Function
Добавлено через 31 секунду
Так выглядит код макроса.
0
03.02.2017, 11:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.02.2017, 11:43
Помогаю со студенческими работами здесь

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

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

Колонтитулы
Доброго времени суток! Ребят возник такой вопрос,как сделать на первых двух страницах одинаковый...

Колонтитулы
Здравствуйте! Имеется файл с колонтитулом в виде ГОСТовского штампика. Вставил его в свой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru