Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
20.04.2024, 11:15:23

Войти
Хотите поблагодарить участника за дельный совет? Нажмите [Повысить]. Так вы заслуженно поднимите репутацию активному участнику.
33 242 Сообщений в 5 457 Тем от 6 758 Пользователей
Последний пользователь: Сергей2662
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Word и VBA
| | |-+  объеденить 2 макроса
Страниц: [1]   Вниз
Печать
Автор Тема: объеденить 2 макроса  (Прочитано 5327 раз)
0 Пользователей и 1 Гость смотрят эту тему.
master-ufa
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 8


Просмотр профиля
« : 19.11.2021, 10:30:17 »

Добрый день.
Один макрос автозамены "от Витера" проводит замену части текста во всех документах Ворд находящихся в одной папке. Очень хороший и УДОБНЫЙ.
Второй макрос сохраняет документы Ворд в ПДФ. Не удобный. Изменяет названия файлов, если в папке находятся файлы кроме Вордовских - выдает ошибку и перестает работать, ну и через клавиши - не удобно.
Вопрос: как корректно добавить второй макрос в первый, что бы после нажатия кнопки "ПУСК" запускалось сохранение файлов Ворд в ПДФ в указанной папке ?
Прошу не писать о существующих программах конвертации файлов. Требуется запуск макроса из файла Ворд.
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #1 : 21.11.2021, 11:55:33 »

Добрый день.
Ничего не хочу сказать, но файл SaveDocxAsPDF пустой совсем. Ни кнопок, ни кода...
Но. Что мешает записать макрорекордером сохранение файла Word в PDF стандартными средствами и поставить эту строку в код? По сути надо найти эту строку:
Код: (vb)
oCurrDoc.Close Savechanges:=wdSaveChanges

и вставить после неё такую:
Код: (vb)
oCurrDoc.ExportAsFixedFormat Replace(ActiveDocument.FullName, ".doc", ".pdf"), wdExportFormatPDF
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
master-ufa
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 8


Просмотр профиля
« Ответ #2 : 22.11.2021, 09:27:02 »

Добрый день.
Ничего не хочу сказать, но файл SaveDocxAsPDF пустой совсем. Ни кнопок, ни кода...

Добавил текст макроса в файл.
Записан
master-ufa
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 8


Просмотр профиля
« Ответ #3 : 22.11.2021, 09:34:25 »

По сути надо найти эту строку:
Код: (vb)
oCurrDoc.Close Savechanges:=wdSaveChanges

Комментарий администратора Не цитируйте сообщения полностью - достаточно выделить нужную фразу и нажать ЦИТИРОВАТЬ. п.п. 4.18 Правил форума

не нашел значение wdSaveChanges в макросе автозамены. Подойдет любой вариант сохранения Ворд в Пдф. в Инете из подходящих нашел только файл SaveDocxAsPDF
« Последнее редактирование: 22.11.2021, 09:49:24 от Дмитрий Щербаков(The_Prist) » Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #4 : 22.11.2021, 09:47:25 »

не нашел значение wdSaveChanges в макросе автозамены
а как же Вы тогда хотите вносить изменения, если не нашли то, что у Вас же в коде прописано?  Улыбка Вы где искали? Каковы Ваши познания VBA? Весь код замены у Вас прописан в UserForm SRFrom. Открываете код этой формы(правая кнопка мыши на форме -View Code) и там уже без проблем сможете найти приведенный мной ранее кусок:
Код: (vb)
    'Закрываем файл с сохранением изменений
    oCurrDoc.Close Savechanges:=wdSaveChanges

P.S. К слову, в приложенном коде по конвертированию ровно тот же подход применен, так что в любом случае надо вносить эти изменения.
И не цитируйте сообщения полностью - достаточно выделить нужную фразу и нажать ЦИТИРОВАТЬ. п.п. 4.18 Правил форума. Если не получается - лучше уж совсем без цитаты, а то сообщение смотрится не очень читабельно. Спасибо.
« Последнее редактирование: 22.11.2021, 09:50:04 от Дмитрий Щербаков(The_Prist) » Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
master-ufa
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 8


Просмотр профиля
« Ответ #5 : 22.11.2021, 14:29:49 »

добавил в макрос
    'Закрываем файл с сохранением изменений
    oCurrDoc.Close Savechanges:=wdSaveChanges
    oCurrDoc.ExportAsFixedFormat Replace(ActiveDocument.FullName, ".docx", ".pdf"), wdExportFormatPDF
NextFile:
  Next sFilePath

выходит ошибка 5825, и останавливается процесс выполнения макроса
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #6 : 22.11.2021, 19:31:25 »

Это уже мой косяк - написал ПОСЛЕ, вместо ДО. Правильнее поменять местами - иначе у нас просто нет документа, который необходимо конвертировать(собственно, об этом ошибка и говорит):
Код: (vb)
    oCurrDoc.ExportAsFixedFormat Replace(oCurrDoc.FullName, ".docx", ".pdf"), wdExportFormatPDF
    'Закрываем файл с сохранением изменений
    oCurrDoc.Close Savechanges:=wdSaveChanges
NextFile:
  Next sFilePath


P.S. Хорошо, что решили все же самостоятельно разобраться.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
master-ufa
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 8


Просмотр профиля
« Ответ #7 : 23.11.2021, 09:42:24 »

Спасибо. Получилось.
Для конвертации файла Ворд в Пдф достаточно одной команды (строки) - это просто чудо!
А что нужно удалить из макроса, что бы не было автозамены, а только конвертация в ПДФ по кнопке "Пуск" в выбранной папки ?
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #8 : 23.11.2021, 09:48:46 »

А что нужно удалить из макроса
А это уже вопрос для другой темы. Там чуть ли не половину кода удалять надо, т.к. форма заточена под замену данных. По сути удалить придется все, начиная с этой строки:
Код: (vb)
lngJunk = oCurrDoc.Sections(1).Headers(1).Range.StoryType

до этой(включительно):
Код: (vb)
oCurrDoc.Windows(1).View.ShowFieldCodes = bShowFieldCode

Но это не точно. Создавайте отдельную тему и там озвучьте проблему. В этой теме Вы заявили проблему объединения двух кодов Улыбка
У Вас же есть отдельный код конвертации - чем не устраивает?
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
master-ufa
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 8


Просмотр профиля
« Ответ #9 : 23.11.2021, 12:28:53 »

Последний вопрос в этой теме.
Чтобы сразу конвертировать файлы формата .docx и .doc надо сделать две строки:
oCurrDoc.ExportAsFixedFormat Replace(oCurrDoc.FullName, ".docx", ".pdf"), wdExportFormatPDF
oCurrDoc.ExportAsFixedFormat Replace(oCurrDoc.FullName, ".doc", ".pdf"), wdExportFormatPDF

или в одной указать два формата:
oCurrDoc.ExportAsFixedFormat Replace(oCurrDoc.FullName, ".docx" ".doc", ".pdf"), wdExportFormatPDF

или через *
oCurrDoc.ExportAsFixedFormat Replace(oCurrDoc.FullName, ".doc*", ".pdf"), wdExportFormatPDF
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #10 : 23.11.2021, 13:04:11 »

Правильнее искать позицию начала расширения:
Код: (vb)
Dim lp&
lp = instrrev(oCurrDoc.FullName,".") 'ищем позицию последней точки строки - т.е. начало расширения
'теперь берем всю строку ДО расширения и объединяем её с новым расширением - pdf
oCurrDoc.ExportAsFixedFormat Mid(oCurrDoc.FullName, 1,lp) & "pdf", wdExportFormatPDF

все эти строки надо записать вместо одной:
Код: (vb)
oCurrDoc.ExportAsFixedFormat Replace(oCurrDoc.FullName, ".docx", ".pdf"), wdExportFormatPDF
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
master-ufa
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 8


Просмотр профиля
« Ответ #11 : 24.11.2021, 10:18:29 »

Спасибо. Всё получилось.
Записан
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru