Работа в готовом excel при создании файла Word, а нуже PDF
svetacyka
Дата: Среда, 05.03.2025, 09:48 |
Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация:
0
±
Замечаний:
0% ±
Office16
Добрый день! Есть готовый макрос, но он формирует файлы в Word, а нужен PDF, как можно дописать код? [vba]Код
Sub main() Dim wdApp As Object Dim wdDoc As Object HomeDir$ = ThisWorkbook.Path Set wdApp = CreateObject("Word.Application") I% = 8 Do If Cells(I%, 1).Value = "" Then Exit Do If Cells(I%, 1).Value <> "" Then FIO$ = Cells(I%, 1).Text DOLG$ = Cells(I%, 2).Text SP$ = Cells(I%, 3).Text KSH$ = Cells(I%, 4).Text Data$ = Cells(I%, 10).Text FIO$ = Cells(I%, 1).Text DOLG$ = Cells(I%, 2).Text SP$ = Cells(I%, 3).Text FileCopy HomeDir$ + "\" + "Шаблоны" + "\" + KSH$ + ".docx", HomeDir$ + "\" + FIO$ + " " + SP$ + ".doc" Set wdDoc = wdApp.Documents.Open(HomeDir$ + "\" + FIO$ + " " + SP$ + ".doc") wdDoc.Range.Find.Execute FindText:="&fio", ReplaceWith:=FIO$ wdDoc.Range.Find.Execute FindText:="&dolg", ReplaceWith:=DOLG$ wdDoc.Range.Find.Execute FindText:="&sp", ReplaceWith:=SP$ wdDoc.Range.Find.Execute FindText:="&prog", ReplaceWith:=PROG$ wdDoc.Range.Find.Execute FindText:="&chas", ReplaceWith:=CHAS$ wdDoc.Range.Find.Execute FindText:="&chass", ReplaceWith:=CHAS$ wdDoc.Range.Find.Execute FindText:="&prichina", ReplaceWith:=PRICHINA$ wdDoc.Range.Find.Execute FindText:="&Data", ReplaceWith:=Data$ wdDoc.Range.Find.Execute FindText:="&FIOSOT", ReplaceWith:=Application.UserName wdDoc.Range.Find.Execute FindText:="&DOLCOT", ReplaceWith:=DOLCOT$ wdDoc.Range.Find.Execute FindText:="&DATARAB", ReplaceWith:=DATARAB$ wdDoc.Range.Find.Execute FindText:="&fio", ReplaceWith:=FIO$ wdDoc.Range.Find.Execute FindText:="&dolg", ReplaceWith:=DOLG$ wdDoc.Range.Find.Execute FindText:="&sp", ReplaceWith:=SP$ wdDoc.Range.Find.Execute FindText:="&fio", ReplaceWith:=FIO$ wdDoc.Range.Find.Execute FindText:="&dolg", ReplaceWith:=DOLG$ wdDoc.Range.Find.Execute FindText:="&sp", ReplaceWith:=SP$ wdDoc.Range.Find.Execute FindText:="&prog", ReplaceWith:=PROG$ wdDoc.Range.Find.Execute FindText:="&chas", ReplaceWith:=CHAS$ wdDoc.Range.Find.Execute FindText:="&chass", ReplaceWith:=CHAS$ wdDoc.Range.Find.Execute FindText:="&prichina", ReplaceWith:=PRICHINA$ wdDoc.Range.Find.Execute FindText:="&Data", ReplaceWith:=Data$ wdDoc.Range.Find.Execute FindText:="&FIOSOT", ReplaceWith:=Application.UserName wdDoc.Range.Find.Execute FindText:="&DOLCOT", ReplaceWith:=DOLCOT$ wdDoc.Range.Find.Execute FindText:="&DATARAB", ReplaceWith:=DATARAB$ wdDoc.Range.Find.Execute FindText:="&fio", ReplaceWith:=FIO$ wdDoc.Range.Find.Execute FindText:="&dolg", ReplaceWith:=DOLG$ wdDoc.Range.Find.Execute FindText:="&sp", ReplaceWith:=SP$ wdDoc.Save wdDoc.Close End If I% = I% + 1 Loop wdApp.Quit MsgBox "готово!" End Sub
[/vba]
Добрый день! Есть готовый макрос, но он формирует файлы в Word, а нужен PDF, как можно дописать код? [vba]Код
Sub main() Dim wdApp As Object Dim wdDoc As Object HomeDir$ = ThisWorkbook.Path Set wdApp = CreateObject("Word.Application") I% = 8 Do If Cells(I%, 1).Value = "" Then Exit Do If Cells(I%, 1).Value <> "" Then FIO$ = Cells(I%, 1).Text DOLG$ = Cells(I%, 2).Text SP$ = Cells(I%, 3).Text KSH$ = Cells(I%, 4).Text Data$ = Cells(I%, 10).Text FIO$ = Cells(I%, 1).Text DOLG$ = Cells(I%, 2).Text SP$ = Cells(I%, 3).Text FileCopy HomeDir$ + "\" + "Шаблоны" + "\" + KSH$ + ".docx", HomeDir$ + "\" + FIO$ + " " + SP$ + ".doc" Set wdDoc = wdApp.Documents.Open(HomeDir$ + "\" + FIO$ + " " + SP$ + ".doc") wdDoc.Range.Find.Execute FindText:="&fio", ReplaceWith:=FIO$ wdDoc.Range.Find.Execute FindText:="&dolg", ReplaceWith:=DOLG$ wdDoc.Range.Find.Execute FindText:="&sp", ReplaceWith:=SP$ wdDoc.Range.Find.Execute FindText:="&prog", ReplaceWith:=PROG$ wdDoc.Range.Find.Execute FindText:="&chas", ReplaceWith:=CHAS$ wdDoc.Range.Find.Execute FindText:="&chass", ReplaceWith:=CHAS$ wdDoc.Range.Find.Execute FindText:="&prichina", ReplaceWith:=PRICHINA$ wdDoc.Range.Find.Execute FindText:="&Data", ReplaceWith:=Data$ wdDoc.Range.Find.Execute FindText:="&FIOSOT", ReplaceWith:=Application.UserName wdDoc.Range.Find.Execute FindText:="&DOLCOT", ReplaceWith:=DOLCOT$ wdDoc.Range.Find.Execute FindText:="&DATARAB", ReplaceWith:=DATARAB$ wdDoc.Range.Find.Execute FindText:="&fio", ReplaceWith:=FIO$ wdDoc.Range.Find.Execute FindText:="&dolg", ReplaceWith:=DOLG$ wdDoc.Range.Find.Execute FindText:="&sp", ReplaceWith:=SP$ wdDoc.Range.Find.Execute FindText:="&fio", ReplaceWith:=FIO$ wdDoc.Range.Find.Execute FindText:="&dolg", ReplaceWith:=DOLG$ wdDoc.Range.Find.Execute FindText:="&sp", ReplaceWith:=SP$ wdDoc.Range.Find.Execute FindText:="&prog", ReplaceWith:=PROG$ wdDoc.Range.Find.Execute FindText:="&chas", ReplaceWith:=CHAS$ wdDoc.Range.Find.Execute FindText:="&chass", ReplaceWith:=CHAS$ wdDoc.Range.Find.Execute FindText:="&prichina", ReplaceWith:=PRICHINA$ wdDoc.Range.Find.Execute FindText:="&Data", ReplaceWith:=Data$ wdDoc.Range.Find.Execute FindText:="&FIOSOT", ReplaceWith:=Application.UserName wdDoc.Range.Find.Execute FindText:="&DOLCOT", ReplaceWith:=DOLCOT$ wdDoc.Range.Find.Execute FindText:="&DATARAB", ReplaceWith:=DATARAB$ wdDoc.Range.Find.Execute FindText:="&fio", ReplaceWith:=FIO$ wdDoc.Range.Find.Execute FindText:="&dolg", ReplaceWith:=DOLG$ wdDoc.Range.Find.Execute FindText:="&sp", ReplaceWith:=SP$ wdDoc.Save wdDoc.Close End If I% = I% + 1 Loop wdApp.Quit MsgBox "готово!" End Sub
[/vba] svetacyka
Ответить
Сообщение Добрый день! Есть готовый макрос, но он формирует файлы в Word, а нужен PDF, как можно дописать код? [vba]Код
Sub main() Dim wdApp As Object Dim wdDoc As Object HomeDir$ = ThisWorkbook.Path Set wdApp = CreateObject("Word.Application") I% = 8 Do If Cells(I%, 1).Value = "" Then Exit Do If Cells(I%, 1).Value <> "" Then FIO$ = Cells(I%, 1).Text DOLG$ = Cells(I%, 2).Text SP$ = Cells(I%, 3).Text KSH$ = Cells(I%, 4).Text Data$ = Cells(I%, 10).Text FIO$ = Cells(I%, 1).Text DOLG$ = Cells(I%, 2).Text SP$ = Cells(I%, 3).Text FileCopy HomeDir$ + "\" + "Шаблоны" + "\" + KSH$ + ".docx", HomeDir$ + "\" + FIO$ + " " + SP$ + ".doc" Set wdDoc = wdApp.Documents.Open(HomeDir$ + "\" + FIO$ + " " + SP$ + ".doc") wdDoc.Range.Find.Execute FindText:="&fio", ReplaceWith:=FIO$ wdDoc.Range.Find.Execute FindText:="&dolg", ReplaceWith:=DOLG$ wdDoc.Range.Find.Execute FindText:="&sp", ReplaceWith:=SP$ wdDoc.Range.Find.Execute FindText:="&prog", ReplaceWith:=PROG$ wdDoc.Range.Find.Execute FindText:="&chas", ReplaceWith:=CHAS$ wdDoc.Range.Find.Execute FindText:="&chass", ReplaceWith:=CHAS$ wdDoc.Range.Find.Execute FindText:="&prichina", ReplaceWith:=PRICHINA$ wdDoc.Range.Find.Execute FindText:="&Data", ReplaceWith:=Data$ wdDoc.Range.Find.Execute FindText:="&FIOSOT", ReplaceWith:=Application.UserName wdDoc.Range.Find.Execute FindText:="&DOLCOT", ReplaceWith:=DOLCOT$ wdDoc.Range.Find.Execute FindText:="&DATARAB", ReplaceWith:=DATARAB$ wdDoc.Range.Find.Execute FindText:="&fio", ReplaceWith:=FIO$ wdDoc.Range.Find.Execute FindText:="&dolg", ReplaceWith:=DOLG$ wdDoc.Range.Find.Execute FindText:="&sp", ReplaceWith:=SP$ wdDoc.Range.Find.Execute FindText:="&fio", ReplaceWith:=FIO$ wdDoc.Range.Find.Execute FindText:="&dolg", ReplaceWith:=DOLG$ wdDoc.Range.Find.Execute FindText:="&sp", ReplaceWith:=SP$ wdDoc.Range.Find.Execute FindText:="&prog", ReplaceWith:=PROG$ wdDoc.Range.Find.Execute FindText:="&chas", ReplaceWith:=CHAS$ wdDoc.Range.Find.Execute FindText:="&chass", ReplaceWith:=CHAS$ wdDoc.Range.Find.Execute FindText:="&prichina", ReplaceWith:=PRICHINA$ wdDoc.Range.Find.Execute FindText:="&Data", ReplaceWith:=Data$ wdDoc.Range.Find.Execute FindText:="&FIOSOT", ReplaceWith:=Application.UserName wdDoc.Range.Find.Execute FindText:="&DOLCOT", ReplaceWith:=DOLCOT$ wdDoc.Range.Find.Execute FindText:="&DATARAB", ReplaceWith:=DATARAB$ wdDoc.Range.Find.Execute FindText:="&fio", ReplaceWith:=FIO$ wdDoc.Range.Find.Execute FindText:="&dolg", ReplaceWith:=DOLG$ wdDoc.Range.Find.Execute FindText:="&sp", ReplaceWith:=SP$ wdDoc.Save wdDoc.Close End If I% = I% + 1 Loop wdApp.Quit MsgBox "готово!" End Sub
[/vba] Автор - svetacyka Дата добавления - 05.03.2025 в 09:48
cmivadwot
Дата: Среда, 05.03.2025, 10:25 |
Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 559
Репутация:
102
±
Замечаний:
0% ±
365
svetacyka , [vba]Код
Sub main() Dim wdApp As Object Dim wdDoc As Object HomeDir$ = ThisWorkbook.Path Set wdApp = CreateObject("Word.Application") I% = 8 Do If Cells(I%, 1).Value = "" Then Exit Do If Cells(I%, 1).Value <> "" Then FIO$ = Cells(I%, 1).Text DOLG$ = Cells(I%, 2).Text SP$ = Cells(I%, 3).Text KSH$ = Cells(I%, 4).Text Data$ = Cells(I%, 10).Text ' Добавьте недостающие переменные (если нужно) PROG$ = Cells(I%, 5).Text ' Пример для столбца 5 CHAS$ = Cells(I%, 6).Text ' Пример для столбца 6 PRICHINA$ = Cells(I%, 7).Text DOLCOT$ = Cells(I%, 8).Text DATARAB$ = Cells(I%, 9).Text ' Копируем шаблон FileCopy HomeDir$ & "\Шаблоны\" & KSH$ & ".docx", HomeDir$ & "\" & FIO$ & " " & SP$ & ".doc" Set wdDoc = wdApp.Documents.Open(HomeDir$ & "\" & FIO$ & " " & SP$ & ".doc") ' Замена меток (оптимизировано - убраны дубликаты) With wdDoc.Range.Find .Execute FindText:="&fio", ReplaceWith:=FIO$ .Execute FindText:="&dolg", ReplaceWith:=DOLG$ .Execute FindText:="&sp", ReplaceWith:=SP$ .Execute FindText:="&prog", ReplaceWith:=PROG$ .Execute FindText:="&chas", ReplaceWith:=CHAS$ .Execute FindText:="&chass", ReplaceWith:=CHAS$ .Execute FindText:="&prichina", ReplaceWith:=PRICHINA$ .Execute FindText:="&Data", ReplaceWith:=Data$ .Execute FindText:="&FIOSOT", ReplaceWith:=Application.UserName .Execute FindText:="&DOLCOT", ReplaceWith:=DOLCOT$ .Execute FindText:="&DATARAB", ReplaceWith:=DATARAB$ End With ' Сохраняем как PDF и закрываем pdfPath$ = HomeDir$ & "\" & FIO$ & " " & SP$ & ".pdf" wdDoc.SaveAs2 FileName:=pdfPath$, FileFormat:=17 ' 17 = wdFormatPDF wdDoc.Close ' Удаляем временный Word-файл Kill HomeDir$ & "\" & FIO$ & " " & SP$ & ".doc" End If I% = I% + 1 Loop wdApp.Quit MsgBox "Готово! PDF-файлы созданы." End Sub
[/vba]
svetacyka , [vba]Код
Sub main() Dim wdApp As Object Dim wdDoc As Object HomeDir$ = ThisWorkbook.Path Set wdApp = CreateObject("Word.Application") I% = 8 Do If Cells(I%, 1).Value = "" Then Exit Do If Cells(I%, 1).Value <> "" Then FIO$ = Cells(I%, 1).Text DOLG$ = Cells(I%, 2).Text SP$ = Cells(I%, 3).Text KSH$ = Cells(I%, 4).Text Data$ = Cells(I%, 10).Text ' Добавьте недостающие переменные (если нужно) PROG$ = Cells(I%, 5).Text ' Пример для столбца 5 CHAS$ = Cells(I%, 6).Text ' Пример для столбца 6 PRICHINA$ = Cells(I%, 7).Text DOLCOT$ = Cells(I%, 8).Text DATARAB$ = Cells(I%, 9).Text ' Копируем шаблон FileCopy HomeDir$ & "\Шаблоны\" & KSH$ & ".docx", HomeDir$ & "\" & FIO$ & " " & SP$ & ".doc" Set wdDoc = wdApp.Documents.Open(HomeDir$ & "\" & FIO$ & " " & SP$ & ".doc") ' Замена меток (оптимизировано - убраны дубликаты) With wdDoc.Range.Find .Execute FindText:="&fio", ReplaceWith:=FIO$ .Execute FindText:="&dolg", ReplaceWith:=DOLG$ .Execute FindText:="&sp", ReplaceWith:=SP$ .Execute FindText:="&prog", ReplaceWith:=PROG$ .Execute FindText:="&chas", ReplaceWith:=CHAS$ .Execute FindText:="&chass", ReplaceWith:=CHAS$ .Execute FindText:="&prichina", ReplaceWith:=PRICHINA$ .Execute FindText:="&Data", ReplaceWith:=Data$ .Execute FindText:="&FIOSOT", ReplaceWith:=Application.UserName .Execute FindText:="&DOLCOT", ReplaceWith:=DOLCOT$ .Execute FindText:="&DATARAB", ReplaceWith:=DATARAB$ End With ' Сохраняем как PDF и закрываем pdfPath$ = HomeDir$ & "\" & FIO$ & " " & SP$ & ".pdf" wdDoc.SaveAs2 FileName:=pdfPath$, FileFormat:=17 ' 17 = wdFormatPDF wdDoc.Close ' Удаляем временный Word-файл Kill HomeDir$ & "\" & FIO$ & " " & SP$ & ".doc" End If I% = I% + 1 Loop wdApp.Quit MsgBox "Готово! PDF-файлы созданы." End Sub
[/vba]cmivadwot
Сообщение отредактировал cmivadwot - Среда, 05.03.2025, 13:13
Ответить
Сообщение svetacyka , [vba]Код
Sub main() Dim wdApp As Object Dim wdDoc As Object HomeDir$ = ThisWorkbook.Path Set wdApp = CreateObject("Word.Application") I% = 8 Do If Cells(I%, 1).Value = "" Then Exit Do If Cells(I%, 1).Value <> "" Then FIO$ = Cells(I%, 1).Text DOLG$ = Cells(I%, 2).Text SP$ = Cells(I%, 3).Text KSH$ = Cells(I%, 4).Text Data$ = Cells(I%, 10).Text ' Добавьте недостающие переменные (если нужно) PROG$ = Cells(I%, 5).Text ' Пример для столбца 5 CHAS$ = Cells(I%, 6).Text ' Пример для столбца 6 PRICHINA$ = Cells(I%, 7).Text DOLCOT$ = Cells(I%, 8).Text DATARAB$ = Cells(I%, 9).Text ' Копируем шаблон FileCopy HomeDir$ & "\Шаблоны\" & KSH$ & ".docx", HomeDir$ & "\" & FIO$ & " " & SP$ & ".doc" Set wdDoc = wdApp.Documents.Open(HomeDir$ & "\" & FIO$ & " " & SP$ & ".doc") ' Замена меток (оптимизировано - убраны дубликаты) With wdDoc.Range.Find .Execute FindText:="&fio", ReplaceWith:=FIO$ .Execute FindText:="&dolg", ReplaceWith:=DOLG$ .Execute FindText:="&sp", ReplaceWith:=SP$ .Execute FindText:="&prog", ReplaceWith:=PROG$ .Execute FindText:="&chas", ReplaceWith:=CHAS$ .Execute FindText:="&chass", ReplaceWith:=CHAS$ .Execute FindText:="&prichina", ReplaceWith:=PRICHINA$ .Execute FindText:="&Data", ReplaceWith:=Data$ .Execute FindText:="&FIOSOT", ReplaceWith:=Application.UserName .Execute FindText:="&DOLCOT", ReplaceWith:=DOLCOT$ .Execute FindText:="&DATARAB", ReplaceWith:=DATARAB$ End With ' Сохраняем как PDF и закрываем pdfPath$ = HomeDir$ & "\" & FIO$ & " " & SP$ & ".pdf" wdDoc.SaveAs2 FileName:=pdfPath$, FileFormat:=17 ' 17 = wdFormatPDF wdDoc.Close ' Удаляем временный Word-файл Kill HomeDir$ & "\" & FIO$ & " " & SP$ & ".doc" End If I% = I% + 1 Loop wdApp.Quit MsgBox "Готово! PDF-файлы созданы." End Sub
[/vba]Автор - cmivadwot Дата добавления - 05.03.2025 в 10:25
igrtsk
Дата: Среда, 05.03.2025, 12:02 |
Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 316
Репутация:
52
±
Замечаний:
0% ±
Excel 2016
Есть готовый макрос, но он формирует файлы в Word, а нужен PDF, как можно дописать код?
К чему такие костыли? Печатайте сразу в pdf-принтер.
Есть готовый макрос, но он формирует файлы в Word, а нужен PDF, как можно дописать код?
К чему такие костыли? Печатайте сразу в pdf-принтер.igrtsk
Инструктор по применению лосей в кавалерийских частях РККА
Ответить
Сообщение Есть готовый макрос, но он формирует файлы в Word, а нужен PDF, как можно дописать код?
К чему такие костыли? Печатайте сразу в pdf-принтер.Автор - igrtsk Дата добавления - 05.03.2025 в 12:02
and_evg
Дата: Среда, 05.03.2025, 13:04 |
Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 472
Репутация:
82
±
Замечаний:
0% ±
Excel 2007
Или сохранять сразу в ПДФ
Ответить
Сообщение Или сохранять сразу в ПДФАвтор - and_evg Дата добавления - 05.03.2025 в 13:04
svetacyka
Дата: Среда, 05.03.2025, 13:11 |
Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация:
0
±
Замечаний:
0% ±
Office16
igrtsk, так как есть готовый excel, в нем на делать доработку, вот прошу помощи если вы согласитесь помочь, буду только этому рада
igrtsk, так как есть готовый excel, в нем на делать доработку, вот прошу помощи если вы согласитесь помочь, буду только этому рада svetacyka
Ответить
Сообщение igrtsk, так как есть готовый excel, в нем на делать доработку, вот прошу помощи если вы согласитесь помочь, буду только этому рада Автор - svetacyka Дата добавления - 05.03.2025 в 13:11
svetacyka
Дата: Среда, 05.03.2025, 13:13 |
Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация:
0
±
Замечаний:
0% ±
Office16
and_evg, чтобы док сразу сохранялся из шаблона в ПДФ
and_evg, чтобы док сразу сохранялся из шаблона в ПДФ svetacyka
Ответить
Сообщение and_evg, чтобы док сразу сохранялся из шаблона в ПДФ Автор - svetacyka Дата добавления - 05.03.2025 в 13:13
svetacyka
Дата: Среда, 05.03.2025, 13:18 |
Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация:
0
±
Замечаний:
0% ±
Office16
Почему такая может быть ошибка, не подскажите?
Почему такая может быть ошибка, не подскажите? svetacyka
Ответить
Сообщение Почему такая может быть ошибка, не подскажите? Автор - svetacyka Дата добавления - 05.03.2025 в 13:18
svetacyka
Дата: Среда, 05.03.2025, 13:20 |
Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация:
0
±
Замечаний:
0% ±
Office16
cmivadwot, спасибо большое, вы так помогли.
cmivadwot, спасибо большое, вы так помогли. svetacyka
Ответить
Сообщение cmivadwot, спасибо большое, вы так помогли. Автор - svetacyka Дата добавления - 05.03.2025 в 13:20
cmivadwot
Дата: Среда, 05.03.2025, 13:31 |
Сообщение № 9
Группа: Проверенные
Ранг: Ветеран
Сообщений: 559
Репутация:
102
±
Замечаний:
0% ±
365
svetacyka , все работает ..как надо??
svetacyka , все работает ..как надо??cmivadwot
Ответить
Сообщение svetacyka , все работает ..как надо??Автор - cmivadwot Дата добавления - 05.03.2025 в 13:31
svetacyka
Дата: Среда, 05.03.2025, 14:04 |
Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация:
0
±
Замечаний:
0% ±
Office16
cmivadwot, да работает, вот вопрос только при большом объеме загрузки информации, макрос выдает ошибку, что она может значить?
cmivadwot, да работает, вот вопрос только при большом объеме загрузки информации, макрос выдает ошибку, что она может значить? svetacyka
Ответить
Сообщение cmivadwot, да работает, вот вопрос только при большом объеме загрузки информации, макрос выдает ошибку, что она может значить? Автор - svetacyka Дата добавления - 05.03.2025 в 14:04
cmivadwot
Дата: Среда, 05.03.2025, 14:17 |
Сообщение № 11
Группа: Проверенные
Ранг: Ветеран
Сообщений: 559
Репутация:
102
±
Замечаний:
0% ±
365
svetacyka , наверно не успевает память освобождать ..открытия закрытия ворда.... Надо дорабатывать.. может позже. Сегодня точно не успею посмотреть.
svetacyka , наверно не успевает память освобождать ..открытия закрытия ворда.... Надо дорабатывать.. может позже. Сегодня точно не успею посмотреть.cmivadwot
Ответить
Сообщение svetacyka , наверно не успевает память освобождать ..открытия закрытия ворда.... Надо дорабатывать.. может позже. Сегодня точно не успею посмотреть.Автор - cmivadwot Дата добавления - 05.03.2025 в 14:17
svetacyka
Дата: Среда, 05.03.2025, 14:17 |
Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация:
0
±
Замечаний:
0% ±
Office16
cmivadwot, хорошо, буду ждать ответа, спасибо за пояснения
cmivadwot, хорошо, буду ждать ответа, спасибо за пояснения svetacyka
Ответить
Сообщение cmivadwot, хорошо, буду ждать ответа, спасибо за пояснения Автор - svetacyka Дата добавления - 05.03.2025 в 14:17
cmivadwot
Дата: Среда, 05.03.2025, 14:23 |
Сообщение № 13
Группа: Проверенные
Ранг: Ветеран
Сообщений: 559
Репутация:
102
±
Замечаний:
0% ±
365
svetacyka , может кто подключится...убрать обновление экрана, добавить какую нибудь задержку.
svetacyka , может кто подключится...убрать обновление экрана, добавить какую нибудь задержку.cmivadwot
Ответить
Сообщение svetacyka , может кто подключится...убрать обновление экрана, добавить какую нибудь задержку.Автор - cmivadwot Дата добавления - 05.03.2025 в 14:23
svetacyka
Дата: Среда, 05.03.2025, 15:02 |
Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация:
0
±
Замечаний:
0% ±
Office16
cmivadwot, вроде нашла ошибку, поправила и все стало в порядке, но единственно, открывает зачем то ворд при создании.
cmivadwot, вроде нашла ошибку, поправила и все стало в порядке, но единственно, открывает зачем то ворд при создании. svetacyka
Ответить
Сообщение cmivadwot, вроде нашла ошибку, поправила и все стало в порядке, но единственно, открывает зачем то ворд при создании. Автор - svetacyka Дата добавления - 05.03.2025 в 15:02
svetacyka
Дата: Среда, 05.03.2025, 16:00 |
Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация:
0
±
Замечаний:
0% ±
Office16
cmivadwot, все работает, но теперь выделает другое, не прогружается до конца запрос, так как данные ранее выгружались
cmivadwot, все работает, но теперь выделает другое, не прогружается до конца запрос, так как данные ранее выгружались svetacyka
Ответить
Сообщение cmivadwot, все работает, но теперь выделает другое, не прогружается до конца запрос, так как данные ранее выгружались Автор - svetacyka Дата добавления - 05.03.2025 в 16:00
cmivadwot
Дата: Среда, 05.03.2025, 23:49 |
Сообщение № 16
Группа: Проверенные
Ранг: Ветеран
Сообщений: 559
Репутация:
102
±
Замечаний:
0% ±
365
svetacyka , да, потому и повторы были в исходном коде, они как раз и обрабатывали повторно вставляемые данные (wdDoc.Range.Find.Execute FindText:="&fio", ........)((( [vba]Код
' Объявление Windows API-функции для создания пауз #If VBA7 Then Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) #Else Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #End If Sub GenerateDocuments() ' Объявление переменных Dim wdApp As Object ' Объект приложения Word Dim wdDoc As Object ' Объект документа Word Dim HomeDir As String ' Путь к рабочей папке Dim I As Long ' Счетчик строк (Long вместо Integer для больших объемов) ' Настройка обработки ошибок On Error GoTo ErrorHandler ' Определение рабочей директории HomeDir = ThisWorkbook.Path ' Путь к папке с текущим Excel-файлом ' Создание экземпляра Word Set wdApp = CreateObject("Word.Application") ' Создаем невидимый объект Word wdApp.Visible = False ' Скрываем интерфейс Word wdApp.ScreenUpdating = False ' Отключаем обновление экрана (ускоряет работу) ' Основной цикл обработки данных I = 8 ' Начинаем с 8-й строки (предполагается, что заголовки в 1-7) Do While Cells(I, 1).Value <> "" ' Цикл пока есть данные в столбце A ' Чтение данных из таблицы Excel FIO = Cells(I, 1).Text ' ФИО из столбца A DOLG = Cells(I, 2).Text ' Должность из столбца B SP = Cells(I, 3).Text ' Доп. параметр из столбца C KSH = Cells(I, 4).Text ' Имя шаблона из столбца D Data = Cells(I, 10).Text ' Дата из столбца J ' Работа с файлами Dim tempDocPath As String tempDocPath = HomeDir & "\" & FIO & " " & SP & ".doc" ' Генерация имени временного файла ' Копирование шаблона FileCopy _ Source:=HomeDir & "\Шаблоны\" & KSH & ".docx", _ Destination:=tempDocPath ' Создаем копию шаблона ' Открытие документа в Word Set wdDoc = wdApp.Documents.Open(tempDocPath) ' Загружаем временный файл ' Поиск и замена меток в документе With wdDoc.Range.Find ' Параметры поиска: .MatchCase = False ' Игнорировать регистр .MatchWholeWord = False ' Не требовать полного совпадения слова ' Замена меток (цифра 2 в конце = Replace:=wdReplaceAll) .Execute "&fio", , , , , , , , , FIO, 2 ' Замена всех вхождений &fio .Execute "&dolg", , , , , , , , , DOLG, 2 ' Замена всех &dolg .Execute "&sp", , , , , , , , , SP, 2 ' Замена всех &sp .Execute "&Data", , , , , , , , , Data, 2 ' Замена всех &Data End With ' Экспорт в PDF wdDoc.ExportAsFixedFormat _ OutputFileName:=HomeDir & "\" & FIO & " " & SP & ".pdf", _ ExportFormat:=17 ' 17 = константа wdExportFormatPDF ' Закрытие документа wdDoc.Close SaveChanges:=False ' Закрываем без сохранения изменений Set wdDoc = Nothing ' Освобождаем память ' Удаление временного файла Kill tempDocPath ' Удаляем копию шаблона ' Управление производительностью If I Mod 20 = 0 Then ' Каждые 20 документов DoEvents ' Разрешаем обработку других событий Sleep 500 ' Пауза 500 мс (0.5 секунды) Application.StatusBar = "Обработано: " & I - 7 ' Вывод прогресса End If I = I + 1 ' Следующая строка Loop Cleanup: ' Блок очистки If Not wdApp Is Nothing Then wdApp.Quit ' Закрываем Word Set wdApp = Nothing ' Освобождаем память End If Application.StatusBar = False ' Сбрасываем статусную строку MsgBox "Обработано документов: " & I - 8, vbInformation Exit Sub ErrorHandler: ' Обработка ошибок MsgBox "Ошибка в строке " & I & ": " & Err.Description, vbCritical Resume Cleanup ' Переход к блоку очистки End Sub
[/vba]
svetacyka , да, потому и повторы были в исходном коде, они как раз и обрабатывали повторно вставляемые данные (wdDoc.Range.Find.Execute FindText:="&fio", ........)((( [vba]Код
' Объявление Windows API-функции для создания пауз #If VBA7 Then Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) #Else Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #End If Sub GenerateDocuments() ' Объявление переменных Dim wdApp As Object ' Объект приложения Word Dim wdDoc As Object ' Объект документа Word Dim HomeDir As String ' Путь к рабочей папке Dim I As Long ' Счетчик строк (Long вместо Integer для больших объемов) ' Настройка обработки ошибок On Error GoTo ErrorHandler ' Определение рабочей директории HomeDir = ThisWorkbook.Path ' Путь к папке с текущим Excel-файлом ' Создание экземпляра Word Set wdApp = CreateObject("Word.Application") ' Создаем невидимый объект Word wdApp.Visible = False ' Скрываем интерфейс Word wdApp.ScreenUpdating = False ' Отключаем обновление экрана (ускоряет работу) ' Основной цикл обработки данных I = 8 ' Начинаем с 8-й строки (предполагается, что заголовки в 1-7) Do While Cells(I, 1).Value <> "" ' Цикл пока есть данные в столбце A ' Чтение данных из таблицы Excel FIO = Cells(I, 1).Text ' ФИО из столбца A DOLG = Cells(I, 2).Text ' Должность из столбца B SP = Cells(I, 3).Text ' Доп. параметр из столбца C KSH = Cells(I, 4).Text ' Имя шаблона из столбца D Data = Cells(I, 10).Text ' Дата из столбца J ' Работа с файлами Dim tempDocPath As String tempDocPath = HomeDir & "\" & FIO & " " & SP & ".doc" ' Генерация имени временного файла ' Копирование шаблона FileCopy _ Source:=HomeDir & "\Шаблоны\" & KSH & ".docx", _ Destination:=tempDocPath ' Создаем копию шаблона ' Открытие документа в Word Set wdDoc = wdApp.Documents.Open(tempDocPath) ' Загружаем временный файл ' Поиск и замена меток в документе With wdDoc.Range.Find ' Параметры поиска: .MatchCase = False ' Игнорировать регистр .MatchWholeWord = False ' Не требовать полного совпадения слова ' Замена меток (цифра 2 в конце = Replace:=wdReplaceAll) .Execute "&fio", , , , , , , , , FIO, 2 ' Замена всех вхождений &fio .Execute "&dolg", , , , , , , , , DOLG, 2 ' Замена всех &dolg .Execute "&sp", , , , , , , , , SP, 2 ' Замена всех &sp .Execute "&Data", , , , , , , , , Data, 2 ' Замена всех &Data End With ' Экспорт в PDF wdDoc.ExportAsFixedFormat _ OutputFileName:=HomeDir & "\" & FIO & " " & SP & ".pdf", _ ExportFormat:=17 ' 17 = константа wdExportFormatPDF ' Закрытие документа wdDoc.Close SaveChanges:=False ' Закрываем без сохранения изменений Set wdDoc = Nothing ' Освобождаем память ' Удаление временного файла Kill tempDocPath ' Удаляем копию шаблона ' Управление производительностью If I Mod 20 = 0 Then ' Каждые 20 документов DoEvents ' Разрешаем обработку других событий Sleep 500 ' Пауза 500 мс (0.5 секунды) Application.StatusBar = "Обработано: " & I - 7 ' Вывод прогресса End If I = I + 1 ' Следующая строка Loop Cleanup: ' Блок очистки If Not wdApp Is Nothing Then wdApp.Quit ' Закрываем Word Set wdApp = Nothing ' Освобождаем память End If Application.StatusBar = False ' Сбрасываем статусную строку MsgBox "Обработано документов: " & I - 8, vbInformation Exit Sub ErrorHandler: ' Обработка ошибок MsgBox "Ошибка в строке " & I & ": " & Err.Description, vbCritical Resume Cleanup ' Переход к блоку очистки End Sub
[/vba]cmivadwot
Ответить
Сообщение svetacyka , да, потому и повторы были в исходном коде, они как раз и обрабатывали повторно вставляемые данные (wdDoc.Range.Find.Execute FindText:="&fio", ........)((( [vba]Код
' Объявление Windows API-функции для создания пауз #If VBA7 Then Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) #Else Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #End If Sub GenerateDocuments() ' Объявление переменных Dim wdApp As Object ' Объект приложения Word Dim wdDoc As Object ' Объект документа Word Dim HomeDir As String ' Путь к рабочей папке Dim I As Long ' Счетчик строк (Long вместо Integer для больших объемов) ' Настройка обработки ошибок On Error GoTo ErrorHandler ' Определение рабочей директории HomeDir = ThisWorkbook.Path ' Путь к папке с текущим Excel-файлом ' Создание экземпляра Word Set wdApp = CreateObject("Word.Application") ' Создаем невидимый объект Word wdApp.Visible = False ' Скрываем интерфейс Word wdApp.ScreenUpdating = False ' Отключаем обновление экрана (ускоряет работу) ' Основной цикл обработки данных I = 8 ' Начинаем с 8-й строки (предполагается, что заголовки в 1-7) Do While Cells(I, 1).Value <> "" ' Цикл пока есть данные в столбце A ' Чтение данных из таблицы Excel FIO = Cells(I, 1).Text ' ФИО из столбца A DOLG = Cells(I, 2).Text ' Должность из столбца B SP = Cells(I, 3).Text ' Доп. параметр из столбца C KSH = Cells(I, 4).Text ' Имя шаблона из столбца D Data = Cells(I, 10).Text ' Дата из столбца J ' Работа с файлами Dim tempDocPath As String tempDocPath = HomeDir & "\" & FIO & " " & SP & ".doc" ' Генерация имени временного файла ' Копирование шаблона FileCopy _ Source:=HomeDir & "\Шаблоны\" & KSH & ".docx", _ Destination:=tempDocPath ' Создаем копию шаблона ' Открытие документа в Word Set wdDoc = wdApp.Documents.Open(tempDocPath) ' Загружаем временный файл ' Поиск и замена меток в документе With wdDoc.Range.Find ' Параметры поиска: .MatchCase = False ' Игнорировать регистр .MatchWholeWord = False ' Не требовать полного совпадения слова ' Замена меток (цифра 2 в конце = Replace:=wdReplaceAll) .Execute "&fio", , , , , , , , , FIO, 2 ' Замена всех вхождений &fio .Execute "&dolg", , , , , , , , , DOLG, 2 ' Замена всех &dolg .Execute "&sp", , , , , , , , , SP, 2 ' Замена всех &sp .Execute "&Data", , , , , , , , , Data, 2 ' Замена всех &Data End With ' Экспорт в PDF wdDoc.ExportAsFixedFormat _ OutputFileName:=HomeDir & "\" & FIO & " " & SP & ".pdf", _ ExportFormat:=17 ' 17 = константа wdExportFormatPDF ' Закрытие документа wdDoc.Close SaveChanges:=False ' Закрываем без сохранения изменений Set wdDoc = Nothing ' Освобождаем память ' Удаление временного файла Kill tempDocPath ' Удаляем копию шаблона ' Управление производительностью If I Mod 20 = 0 Then ' Каждые 20 документов DoEvents ' Разрешаем обработку других событий Sleep 500 ' Пауза 500 мс (0.5 секунды) Application.StatusBar = "Обработано: " & I - 7 ' Вывод прогресса End If I = I + 1 ' Следующая строка Loop Cleanup: ' Блок очистки If Not wdApp Is Nothing Then wdApp.Quit ' Закрываем Word Set wdApp = Nothing ' Освобождаем память End If Application.StatusBar = False ' Сбрасываем статусную строку MsgBox "Обработано документов: " & I - 8, vbInformation Exit Sub ErrorHandler: ' Обработка ошибок MsgBox "Ошибка в строке " & I & ": " & Err.Description, vbCritical Resume Cleanup ' Переход к блоку очистки End Sub
[/vba]Автор - cmivadwot Дата добавления - 05.03.2025 в 23:49
svetacyka
Дата: Четверг, 06.03.2025, 09:29 |
Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация:
0
±
Замечаний:
0% ±
Office16
cmivadwot, могу вам скинуть файл, в котором вы все просмотрите, так как немного не понимаю.
cmivadwot, могу вам скинуть файл, в котором вы все просмотрите, так как немного не понимаю. svetacyka
Ответить
Сообщение cmivadwot, могу вам скинуть файл, в котором вы все просмотрите, так как немного не понимаю. Автор - svetacyka Дата добавления - 06.03.2025 в 09:29
svetacyka
Дата: Четверг, 06.03.2025, 10:33 |
Сообщение № 18
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация:
0
±
Замечаний:
0% ±
Office16
Добрый день, при запуске кода не видит шаблон и выдает шибка 76, что блин делать
Добрый день, при запуске кода не видит шаблон и выдает шибка 76, что блин делать svetacyka
Ответить
Сообщение Добрый день, при запуске кода не видит шаблон и выдает шибка 76, что блин делать Автор - svetacyka Дата добавления - 06.03.2025 в 10:33