Новости:

Интересные и полезные статьи по работе с Excel и VBA
можно найти в разделе ХИТРОСТИ

Главное меню

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.

Просмотр сообщений

Темы - Dmitry_Cheplya

#1
Всех с Новым Годом и Рождеством!
Столкнула меня жизнь с необходимостью автоматизировать печать шильд для электрошкафов. Технология в двух словах такая. Есть реестр шкафов, изготовленных в рамках заказа, каждый должен получить заводской номер (его присваивает моя программа - принцип: сквозная нумерация, последний присвоенный номер +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 Мб).

Понимаю, что вопрос немного не по теме, но куда его еще пришить не понял. Похожие темы мелькали, но ответа на свои вопросы не нашел.
#2
Добрый день!
На сайте есть тема, посвященная работе с диалоговыми окнами выбора папки, выбора файла - там все понятно, но вопрос остался: можно ли при работе с диалоговым окном выбора файла задать начальную папку для поиска, а не использовать папку, использованную в последний раз (так работает Excel по умолчанию)? В Application.GetOpenFilename нужного параметра нет, но ведь Excel как-то помнит, ОТКУДА пользователь в последний раз открывал файл!!!
Откуда задача. Результаты сканирования документов падают в одну сетевую папку и удобно было бы пользователю сразу в нее попадать, чтобы выбрать файл со своим сканом - программа выбранный файл правильно назовет и перенесет файл в нужную папку.
#3
Приветствую, форумчане!
Столкнулся с необъяснимым мне явлением. Есть событийная процедура VBA Excel (_Change), которая обращается к функции на другом листе с аргументом-значением ячейки (все по классике). Но при обращении к функции такой строкой:

.Cells(q, 12).Value = ThisWorkbook.Worksheets("Расчет ЗП").Preobraz(.Cells(Target.Row, 8).Value, ThisWorkbook.Name) & "*" & .Cells(Target.Row, 9).Value

возникает ошибка "Run-time error '1004' Application-defined or object-defined error".
Если обращение к функции заменить произвольной строкой (от знака "=" до первого "&"), то программа вставляет выражение в ячейку. Так и должно быть.
Если значение ячейки в качестве аргумента функции заменить произвольной строкой, то программа переходит в процедуру, отрабатывает ее (функция подменяет в строке буквы на цифры, превращая строку в математическое выражение - в другом месте программы эта функция уже показала, что работает правильно) и возвращается на эту же строку и опять уходит в отработку функции. И так по кругу. Значение никакое не вносит в ячейку.

Если что, то в начале событийной процедуры стоит "гашение" реакции на события строкой Application.EnableEvents = False.

Если кто поможет разгадать ребус, буду признателен.
Яндекс.Метрика Рейтинг@Mail.ru