Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Работа в готовом excel при создании файла Word, а нуже PDF - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Работа в готовом 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
Дата добавления - 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]


Сообщение отредактировал 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
Дата добавления - 05.03.2025 в 12:02
and_evg Дата: Среда, 05.03.2025, 13:04 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 472
Репутация: 82 ±
Замечаний: 0% ±

Excel 2007
Печатайте сразу в pdf

Или сохранять сразу в ПДФ
 
Ответить
Сообщение
Печатайте сразу в pdf

Или сохранять сразу в ПДФ

Автор - and_evg
Дата добавления - 05.03.2025 в 13:04
svetacyka Дата: Среда, 05.03.2025, 13:11 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Office16
igrtsk, так как есть готовый excel, в нем на делать доработку, вот прошу помощи

если вы согласитесь помочь, буду только этому рада
 
Ответить
Сообщениеigrtsk, так как есть готовый excel, в нем на делать доработку, вот прошу помощи

если вы согласитесь помочь, буду только этому рада

Автор - svetacyka
Дата добавления - 05.03.2025 в 13:11
svetacyka Дата: Среда, 05.03.2025, 13:13 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Office16
and_evg, чтобы док сразу сохранялся из шаблона в ПДФ
 
Ответить
Сообщениеand_evg, чтобы док сразу сохранялся из шаблона в ПДФ

Автор - svetacyka
Дата добавления - 05.03.2025 в 13:13
svetacyka Дата: Среда, 05.03.2025, 13:18 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Office16
Почему такая может быть ошибка, не подскажите?
К сообщению приложен файл: 3326652.png (18.5 Kb)
 
Ответить
СообщениеПочему такая может быть ошибка, не подскажите?

Автор - svetacyka
Дата добавления - 05.03.2025 в 13:18
svetacyka Дата: Среда, 05.03.2025, 13:20 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Office16
cmivadwot, спасибо большое, вы так помогли.
 
Ответить
Сообщениеcmivadwot, спасибо большое, вы так помогли.

Автор - svetacyka
Дата добавления - 05.03.2025 в 13:20
cmivadwot Дата: Среда, 05.03.2025, 13:31 | Сообщение № 9
Группа: Проверенные
Ранг: Ветеран
Сообщений: 559
Репутация: 102 ±
Замечаний: 0% ±

365
svetacyka,
все работает ..как надо??
 
Ответить
Сообщениеsvetacyka,
все работает ..как надо??

Автор - cmivadwot
Дата добавления - 05.03.2025 в 13:31
svetacyka Дата: Среда, 05.03.2025, 14:04 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Office16
cmivadwot, да работает, вот вопрос только при большом объеме загрузки информации, макрос выдает ошибку, что она может значить?
К сообщению приложен файл: 5028466.png (18.5 Kb)
 
Ответить
Сообщениеcmivadwot, да работает, вот вопрос только при большом объеме загрузки информации, макрос выдает ошибку, что она может значить?

Автор - svetacyka
Дата добавления - 05.03.2025 в 14:04
cmivadwot Дата: Среда, 05.03.2025, 14:17 | Сообщение № 11
Группа: Проверенные
Ранг: Ветеран
Сообщений: 559
Репутация: 102 ±
Замечаний: 0% ±

365
svetacyka, наверно не успевает память освобождать ..открытия закрытия ворда.... Надо дорабатывать.. может позже. Сегодня точно не успею посмотреть.
 
Ответить
Сообщениеsvetacyka, наверно не успевает память освобождать ..открытия закрытия ворда.... Надо дорабатывать.. может позже. Сегодня точно не успею посмотреть.

Автор - cmivadwot
Дата добавления - 05.03.2025 в 14:17
svetacyka Дата: Среда, 05.03.2025, 14:17 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Office16
cmivadwot, хорошо, буду ждать ответа, спасибо за пояснения
 
Ответить
Сообщениеcmivadwot, хорошо, буду ждать ответа, спасибо за пояснения

Автор - svetacyka
Дата добавления - 05.03.2025 в 14:17
cmivadwot Дата: Среда, 05.03.2025, 14:23 | Сообщение № 13
Группа: Проверенные
Ранг: Ветеран
Сообщений: 559
Репутация: 102 ±
Замечаний: 0% ±

365
svetacyka, может кто подключится...убрать обновление экрана, добавить какую нибудь задержку.
 
Ответить
Сообщениеsvetacyka, может кто подключится...убрать обновление экрана, добавить какую нибудь задержку.

Автор - cmivadwot
Дата добавления - 05.03.2025 в 14:23
svetacyka Дата: Среда, 05.03.2025, 15:02 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Office16
cmivadwot, вроде нашла ошибку, поправила и все стало в порядке, но единственно, открывает зачем то ворд при создании.
 
Ответить
Сообщениеcmivadwot, вроде нашла ошибку, поправила и все стало в порядке, но единственно, открывает зачем то ворд при создании.

Автор - svetacyka
Дата добавления - 05.03.2025 в 15:02
svetacyka Дата: Среда, 05.03.2025, 16:00 | Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Office16
cmivadwot, все работает, но теперь выделает другое, не прогружается до конца запрос, так как данные ранее выгружались
К сообщению приложен файл: 3659142.png (2.8 Kb)
 
Ответить
Сообщение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
Дата добавления - 05.03.2025 в 23:49
svetacyka Дата: Четверг, 06.03.2025, 09:29 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Office16
cmivadwot, могу вам скинуть файл, в котором вы все просмотрите, так как немного не понимаю.
 
Ответить
Сообщениеcmivadwot, могу вам скинуть файл, в котором вы все просмотрите, так как немного не понимаю.

Автор - svetacyka
Дата добавления - 06.03.2025 в 09:29
svetacyka Дата: Четверг, 06.03.2025, 10:33 | Сообщение № 18
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Office16
Добрый день, при запуске кода не видит шаблон и выдает шибка 76, что блин делать
К сообщению приложен файл: 1462175.png (35.6 Kb)
 
Ответить
СообщениеДобрый день, при запуске кода не видит шаблон и выдает шибка 76, что блин делать

Автор - svetacyka
Дата добавления - 06.03.2025 в 10:33
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!