Новости:

Форум на данный момент в стадии обновления. Если у Вас возникли проблемы со входом в свою учетную запись - просьба писать на email: info@excel-vba.ru

Главное меню

Изменение данных в pdf-файле из таблицы в Excel

Автор Dmitry_Cheplya, 06.01.2025, 20:42:53

« назад - далее »

Dmitry_Cheplya

Всех с Новым Годом и Рождеством!
Столкнула меня жизнь с необходимостью автоматизировать печать шильд для электрошкафов. Технология в двух словах такая. Есть реестр шкафов, изготовленных в рамках заказа, каждый должен получить заводской номер (его присваивает моя программа - принцип: сквозная нумерация, последний присвоенный номер +1). В реестре есть несколько полей, которые используются для заполнения полей шильда и заполнения некоторых других документов (паспорта, протоколы - это другие программы делают). При создании нового шильда (нажатие кнопки на листе) открывается форма, в которой пользователь выбирает проект и короткое название шкафа. Дальше программа вытягивает данные из реестра и вносит в поля формы - вроде просмотра того, что будет внесено в шильд. Подключена библиотека "Acrobat".
Кнопка "Заполнить" вносит данные в шаблон, открытый в Adobe Acrobat Pro. Вот тут и начинается самое интересное.
Шаблон заполняется без проблем с исходного состояния до любого выбранного шкафа. Однако при выборе другого "шкафа", его данные не удается внести в шильд - возникает, на мой взгляд, странная ошибка "Type mismatch" в момент внесения данных из текстового поля с данными типа Date. Использование CStr не помогает. Если закоментить эту строку, то все работает. Это проблема на компе на работе.
Дома имею ошибку "Run-time error '48': Error in loading DLL" на строке
Set AcroApp = CreateObject("AcroExch.App")
при попытке внести данные в шаблон. Библиотека "Acrobat" не подключена, но подключена "Adobe Acrobat 10.0 Type Library". Переключить библиотеки не получается - переключает обратно: "Acrobat" отключает и подключает "Adobe Acrobat 10.0 Type Library".
Прошу подсказать, что у меня не так с программой на рабочем и на домашнем компе.
Вложил файлы с программой, шаблон шильды не проходит по размеру, чтобы можно было его вложить (0,7 Мб, можно только 0,3 Мб).

Понимаю, что вопрос немного не по теме, но куда его еще пришить не понял. Похожие темы мелькали, но ответа на свои вопросы не нашел.

Дмитрий Щербаков(The_Prist)

Цитата: Dmitry_Cheplya от 06.01.2025, 20:42:53Прошу подсказать, что у меня не так с программой на рабочем и на домашнем компе
нет нужной библиотеки. Конкретно - этой: "AcroExch.App". Она идет вместе с программой Adobe Acrobat. При этом Adobe Acrobat должна быть установлена на ПК(не Reader, а именно Adobe Acrobat).
Цитата: Dmitry_Cheplya от 06.01.2025, 20:42:53странная ошибка "Type mismatch" в момент внесения данных из текстового поля с данными типа Date
здесь и проще и сложнее: надо смотреть, что за данные конкретно куда попадать должны и в каком виде. Привели бы хотя бы строку, на которой ошибка - было бы проще подсказать.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Dmitry_Cheplya

Спасибо за отклик на мой вопрос! Уже начал терять надежду, что хоть кто-то посмотрит.

Цитата: Дмитрий Щербаков(The_Prist) от 09.01.2025, 12:31:51"AcroExch.App". Она идет вместе с программой Adobe Acrobat. При этом Adobe Acrobat должна быть установлена на ПК(не Reader, а именно Adobe Acrobat).
Именно Adobe Acrobat DC установлен на компьютере (домашнем), на работе Adobe Acrobat Pro. Подключил библиотеки (см. файл вложения). На рабочем компьютере подключена только "Acrobat". Попытка подключить обе библиотеки на домашнем компе приводит к конфликту с существующим модулем, проектом или библиотекой (так и пишет в сообщении).

Цитата: Дмитрий Щербаков(The_Prist) от 09.01.2025, 12:31:51надо смотреть, что за данные конкретно куда попадать должны и в каком виде. Привели бы хотя бы строку, на которой ошибка - было бы проще подсказать.

Выпадает в ошибку в строке
field3.Value = .TextBox16.Value
примерно 122 строка программы. Всплывающая подсказка значения .TextBox16.Value показывает правильные данные. Что интересно, даже при замене .TextBox16.Value на .TextBox17.Value (строчкой выше также корректно вносит значения в другое поле) вылазит та же ошибка типов данных.

Dmitry_Cheplya

Заменил файл с самой программой - один баг убрал

Дмитрий Щербаков(The_Prist)

Цитата: Dmitry_Cheplya от 09.01.2025, 22:40:57field3.Value = .TextBox16.Value
TextBox всегда содержит текст. А поле "field3" скорее всего требует либо дату, либо число. Попробуйте такой вариант:
field3.Value = CDate("01." & .TextBox16.Value)ну или так:
field3.Value = "01." & .TextBox16.Valueно, чтобы ответить точнее - надо точно знать, что должно быть в field3(какое значение и какого типа). По одному файлу с кодом этого не понять.
Цитата: Dmitry_Cheplya от 09.01.2025, 22:40:57Именно Adobe Acrobat DC установлен
Я знаю Adobe Acrobat Reader DC. Это он у Вас установлен? Тогда см. мой пост выше - это все же бесплатный Reader(который может только читать по сути), а нужен именно Adobe Acrobat Pro, который позволяет редактировать документ.
И не очень понятно, зачем Вы сначала подключаете библиотеки к проекту, а затем используете позднее связывание(CreateObject("AcroExch.app")). По сути, вместо этих строк:
Set AcroApp = CreateObject("AcroExch.app")
Set theForm = CreateObject("AcroExch.PDDoc")
при подключенных библиотеках наиболее правильно создавать объекты так:
Set AcroApp = New Acrobat.CAcroApp
Set theForm = New Acrobat.CAcroPDDoc
тогда и конфликтов меньше будет.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Dmitry_Cheplya

Я для наглядности сделал несколько картинок для описания проблемы в хронологическом порядке.
Открываем шаблон - его поля заполнены типовыми значениями.

Dmitry_Cheplya

В программе выбираем из базы нужное оборудование и вносим значение в шаблон шильды - все заполняется корректно без проблем.

Dmitry_Cheplya

При попытке внести изменения в этот же заполненный шаблон данными другого оборудования возникает ошибка

Dmitry_Cheplya

В коде нет ничего, что могло бы выглядеть не так. Значение поля формы считывается корректно - текстовое поле со значением "12.2024"

Dmitry_Cheplya

Программа работает корректно, пока не доходит до поля Field3.value и все данные меняются в соответствии с программой.
Закомментировать строку с ошибкой - программа работает дальше нормально. Почему из шаблона программа работает без ошибки, а при повторном использовании ранее заполненного шаблона выпадает ошибка?

Дмитрий Щербаков(The_Prist)

Цитата: Dmitry_Cheplya от 10.01.2025, 11:41:22Я для наглядности сделал несколько картинок
по картинкам не понять, что там стало с полем. Может оно в процессе заполнения как-то изменяется и требует уже иной тип данных. Ошибка говорит об этом очень прямолинейно. Поэтому без самого шаблона PDF и Adobe Pro понять и определить проблему очень сложно.
Как вариант, если нужно именно текст и все такое - можете попробовать заполнять так:
field3.Value = .TextBox16.Value & "_b"Это просто для эксперимента - если при таком подходе ошибки не будет, значит надо записывать в любых случаях явный текст. Может просто пробел добавить в конце или еще что-то незаметное(некий нечитаемый символ и т.п.).
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Dmitry_Cheplya

Попробовал с & "r" - тоже самое. Изначально он из формы считывает значение как строку и в сплывающей подсказке значения тоже строка. Но в остальные поля программа принимает значения без проблем! Попробую пересоздать поле и повторить эксперимент

Dmitry_Cheplya

Пересоздал все поля и все равно в том же месте останавливается с той же ошибкой! Даже имя другое пол присвоил...

Дмитрий Щербаков(The_Prist)

Значит что-то неверно сохраняется или как писал ранее - при заполнении что-то имеет иной тип.
Полагаю, самым оптимальным будет заполненную форму сохранять в другую папку, а открывать каждый раз заново чистый шаблон.
Нигде в коде не нашел сохранения именно самого файла формы(типа theForm.SaveAs). Может в этом проблема. А может и нет.
В любом случае можно:
проанализировать это поле ДО заполнения
заполнить из одной строки, закрыть. Посмотреть, что там получилось в итоге и что с этим полем.
Возможно, поймете причину.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Яндекс.Метрика Рейтинг@Mail.ru