Страницы: 1
RSS
Импорт пользовательских форм и кодов VBA из файла в файл
 
Доброго времени суток, уважаемые форумчане. Заранее приношу извинения за некоторую многобуквенность. Скажу сразу, все нижеизложенное я ЗАДУМАЛ сделать чисто для облегчения своей работы, без полной уверенности в реальности выполнения задачи. Итак, периодически выявляются ошибки или недочеты в кодах созданных мною  (очень часто с помощью нашего форума) файлов или например новые элементы просят сделать на форме. После устранения или доделок приходится по удаленному доступу связываться с пользователями  и, скопировав их файл к себе (или мой обновленный к ним), заменять userform в их файле и/или код на страннице. А задумал я следующее: создается файл, в который помещаются все измененные userform и/или листы, разумеется под теми же именами. На открытие файла вешается приблизительно такой алгоритм:
1. Запрашивается файл для изменений:
Код
           If MsgBox("Вы уверены?", vbCritical + vbYesNo, "Внимание! Подумайте перед ответом") = vbYes Then
                FileName = GetFileName("Укажите файл для импорта", ThisWorkbook.Path) 'запрашиваем имя файла
                If Len(FileName) = 0 Then Exit Sub 'выход, если пользователь отказался от выбора файла
            Else: Exit Sub
            End If
2. Запускаем цикл (и вот здесь мои познания пока кончаются :oops: ): проходим по всем имеющимся userform нового файла и в случае нахождения такого же имени в файле пользователя, сначала удаляем форму (как я понял заменить одинаково называющиеся userform Excel не даст) и КОПИРУЕМ эту userform в файл пользователя, если же формы с таким именем нет в файле пользователя, то просто копируем соответствующую форму.

3. Аналогично проходим по именами листов: если такой лист есть, то меняем КОД (весь целиком) имеющийся на нем на код с такого же листа нового файла, если нет, то просто копируем лист (с кодом и возможными данными) в файл пользователя.

4.После отработки кода файл закрывается и вуаля: у пользователя оказывается файл с обновленными userform и кодами на листах

Можно ли так сделать и как, если можно? Заранее спасибо всем откликнувшимся
 
Вот этого должно хватить для общего понимания процесса: Как добавить код процедуры программно, скопировать модуль
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо, Дмитрий, попробую разобраться
 
чтобы осуществить импорт формы или кодов VBA в один файл нужно предварительно сделать экспорт из исходного файла
открыв редактор VBA вы можете увидеть окно  Project Explorer (если не видите - нажмите Ctrl+R) в этом окне щелкнув правой кнопкой мыши по форме или модулю
увидите пункт Export (и  Import тоже увидите, но это потребуется вам в другом проекте)
экспорт проходит в отдельный файл, который потом можно импортировать в другой проект
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
А можно вообще без экспорта/импорта обойтись: открыть оба проекта и в проводнике проекта мышкой перетащить нужное из одного в другой.
 
Глубокоуважаемые Игорь и Юрий, возможно Вы недостаточно подробно прочитали мой 1 пост в этой теме 8) . Как с помощью экспорта/импорта или перетаскивания решить мою задачу я знаю, но, повторюсь, все это требует неких дополнительных действий от меня (пусть и несложных). А задуманный вариант требует ТОЛЬКО пересылки по почте файла с обновленными userform и листами и однократного действия пользователя.
 
Цитата
OlegO написал:
Вы недостаточно подробно прочитали мой 1 пост в этой теме
А как по моему, это вы не внимательно читали статью Дмитрий(The_Prist) Щербаков по ссылке. Там как раз и описывается, как ПРОГРАММНО экспортировать и импортировать программные компоненты. Детали можно почитать, например, Объектная модель VBE
Изменено: Андрей VG - 13.07.2020 18:31:35
 
Цитата
OlegO написал:
Глубокоуважаемые Игорь и Юрий...
OlegO, а почему Вы решили, что мой #5 адресован Вам? )
 
Ну вообще обычно, чтобы не подменять модули каждому пользователю и надеяться на то, что пользователь все сделает ровно - все делают в надстройке, выкладывают в сетевой доступ и дают путь к нему. А если надо что-то поменять - делают регламент, что в такое-то время все должны отключиться от надстройки(вырубить Excel, например) на 30 минут, за которые Вы тупо подменяете надстройку новой и все.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Статью Дмитрия я прочитал и попытаюсь применить на практике изложенное там, но и советы и помощь от других форумчан приму с радостью. Кстати, у Дмитрия на его форуме есть как мне кажется даже более подходящая тема: https://www.excel-vba.ru/general/moi-programmy-dlya-raboty-s-excel/kopirovanie-modudej-i-form-iz-odn... Жаль только код этой формы нельзя (или я не смог :( ) увидеть

Цитата
Дмитрий(The_Prist) Щербаков написал: выкладывают в сетевой доступ и дают путь к нему.
Дмитрий, у меня ситуация не такая масштабная, у меня нет сетевого ресурса для пользователя, самих пользователей менее 10, находятся они в других точках города. Да и сделать все эти замены мне нетрудно, но вот прибежала мысль что это можно сделать иначе и не убегает ;)  
 
Цитата
OlegO написал:
находятся они в других точках города
что мешает ровно так же просто высылать им новую надстройку? Для чего вообще тут надстройка: в ней все коды, но работает она с теми файлами, которые ей подсовывают. Т.е. в надстройке только сами коды и формы содержатся, а все данные непосредственно у пользователя. Так Вы вообще проблем избежите.

Цитата
OlegO написал:
Жаль только код этой формы нельзя (или я не смог  ) увидеть
эта программа написана на другом языке программирования и открытый код есть только у меня и он весьма обширен :) Но пользоваться программой никто не мешает.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий, Вы прилично переоценивайте мои умения, мне бы хоть мой вариант суметь сделать, а уж потом браться за создание надстройки (вещь безусловно полезную, сам использую например OfficeTab). Подскажите, если нетрудно, как в моем предполагаемом цикле можно проверить имена userform (на совпадения с именами userform нового файла), как их удалить в таком случае я вроде бы понял. И вообще прав ли я, предполагая что userform нельзя просто заменить в случае такого нахождения (по аналогии, когда мы закрываем файл без сохранения применяя параметр False)?
 
Цитата
OlegO написал:
проверить имена userform
Как добавить код процедуры программно, скопировать модуль

а надстройку создать вообще не сложно, никаких спец.навыков не нужно: Как создать свою надстройку?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Наверх