Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/33: Рейтинг темы: голосов - 33, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 27.03.2011
Сообщений: 3

Mscal.ocx не удается зарегестрировать в references

27.03.2011, 23:24. Показов 7013. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Встала задача прикрутить к excel вызов всплывающего календаря. Задача осложняется, что приложение должно работать на компьютерах с различными версиями офиса, а mscal (файл с компонентом сalrndar control) по умолчанию может не установится.Все зависит от версии office и того какие приложений из пакета office устанавливаются.
В теории, можно действовать двумя способами:
1. Проверять есть ли компонент календаря на данном компьютере. И если нет, то отключать весь функционал связаный со всплывающим календарем. Тут возникает проблема с тем, что соответствующий код требует разрешить макросам доверенный доступ к элементам VBA (не дословно, но суть примерно такая). Мне бы не хотелось так делать, так как это создает потенциальные риски в безопасности.

2. Сделать сетап файл и устанавливать компонент (если его еще нет) вместе с excel-евским файлом.

Решил идти вторым путем. Создал с помощью inno setup установочный файл прописал там регистрацию компоненты календаря, но к сожалению она работает не всегда. Причем не ясно от чего это зависит. Казалось бы начальные условия установок одинаковы.
Сетапник выполняет следующую команду:
Windows Batch file
1
"C:\WINDOWS\system32\regsvr32.exe" /s "C:\WINDOWS\system32\mscal.ocx"
Проверил сам.
Копирую файл mscal.ocx в system32 (WinXP, 32bit). Запускаю:
Windows Batch file
1
Regsvr32 c:\windows\system32\mscal.ocx
все ок.
Далее удаляю компонент из ситемы(файл не трогаю):
Windows Batch file
1
Regsvr32 /u c:\windows\system32\mscal.ocx
Компонент календаря исчезает, но если снова выполнить
Windows Batch file
1
Regsvr32 c:\windows\system32\mscal.ocx
то календарь или не появляется в references вообще, или появляется, но при попытке добавить соответствующий control на форму вываливается сообщение о ошибке "Библиотеке не найдена".
После этого иногда получается заставить его работать если из меню Tools->References нажать Find и указать файл с календарем вручную.

В связи со всем выше сказанным помогите найти ответы на несколько вопросов:
Как правильно регистрировать и удалят references?
Можно ли как-то проверить текущее состояние mscal.ocx - установлен или нет?
Как можно гарантировать установку календаря?(в пределах естественных ограничений связанных с отсутствием прав и т.д.)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.03.2011, 23:24
Ответы с готовыми решениями:

Как отключить mscal.ocx?
Парился я тут несколько сабжей назад на счет создания дистрибутива ... Вроде разобрался (спасибо всем участникам - помогли)! Но вот...

Ошибка MSCAL.OCX в office 2010
Добрый день! База данных написана в 2007 access, и отлично работает в 2007 и 2003 версии. Но по сути она нужна в 2010 версии. При...

Регистрация Mscal.ocx (Календарь) в VB6 Windows 7 64x
Запускаю cmd.exe от имени администратора: cd \windows\syswow64 потом regsvr32 mscal.ocx Enter и не регистрируется. Скачал программу...

4
Частенько бываю
 Аватар для Vlanib
750 / 331 / 42
Регистрация: 20.06.2007
Сообщений: 854
28.03.2011, 05:06
А не пробовали рыть в сторону написания собственного календарика? И включить его в проект VBA.
0
 Аватар для mc-black
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
28.03.2011, 10:38
Делаем установщик, работающий примерно по такому алгоритму:
1. Проверить регистрацию библиотеки календаря через наличие и целостность веток, ключей и значений в реестре. Инфа о COM-объектах в реестре хранится в где-то внутри HKEY_CLASSES_ROOT. Здесь также можно проверить наличие файла, что в принципе необязательно.
2. Если компонент не зарегистрирован, скопировать файл на новое место. При этом пути не должны быть жестко заданы, используйте переменные окружения, т.к. не у всех Windows установлена на диск C, и не у всех в папку с именем Windows.
3. Зарегистрировать файл в системе. Кроме непосредственно вызова команды надо как-то получить результат выполнения, чтобы в случае ошибки регистрации откатить все назад. Здесь надо или использовать regsvr32, либо напрямую делать API-вызовы, что немного сложней, но в принципе есть открытые исходники на тему.
4. Включить доверенный доступ к проектам VBA. Это всего 1 ключик в реестре, зависящий только от версии Excel, установленный в значение 1. Важно: всеэкземпляры Excel при этом должны быть закрыты, иначе не прокатит! Ключ реестра тут:
Code
1
2
3
4
Windows Registry Editor Version 5.00
 
[HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Security]
"AccessVBOM"=dword:00000001
5. Открыть наш файл и подключить References к проекту VBA. Если в системе уже установлен календарь, но другой версии, то создать ссылку не на версию нашей библиотеки, а на имеющуюся версию.
6. Снова закрыть Excel и отключить доверенный доступ к проектам VBA.

Получается инсталлер будет отнюдь непростая программа. Времени отнимет массу. Из плюсов: потом основу этого инсталлера сможете использвать где угодно с той же целью.
0
0 / 0 / 0
Регистрация: 27.03.2011
Сообщений: 3
28.03.2011, 12:24  [ТС]
Цитата Сообщение от Vlanib
А не пробовали рыть в сторону написания собственного календарика? И включить его в проект VBA.
Цитата Сообщение от mc-black Посмотреть сообщение
Делаем установщик, работающий примерно по такому алгоритму:
...
Получается инсталлер будет отнюдь непростая программа. Времени отнимет массу. Из плюсов: потом основу этого инсталлера сможете использвать где угодно с той же целью.
Боюсь что оба варианта слишком сложны для меня
to Vlanib:
Пытался найти готовый календарик с открытым кодом, но увы ничего рабочего так и не увидел.
Если подскажете где можно скачать буду очень благодарен.
0
2 / 2 / 2
Регистрация: 03.06.2013
Сообщений: 34
08.07.2013, 22:41
Вот например
Вложения
Тип файла: rar Календарь_Tic_Tac.rar (56.3 Кб, 108 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.07.2013, 22:41
Помогаю со студенческими работами здесь

Не удается зарегистрировать imgedit.ocx
Windows 7 64 битный Run-timr error "339" imgedit.ocx При попытке перерегистрации imgedit.ocx Либо Еще пробовал загрузить...

Зарегестрировать GUIDS в реестре
Здравствуйте есть код написан на С++. То есть реализовал компонент(логика, сервер) через Interface IUnknown с функциями Release(), AddRef()...

Не удалось зарегестрировать URL
Сегодня начал разбирать WCF, вроде ничего сложного, только нужно дальше читать и пробовать. Решил реализовать самый простейший пример:...

Как правильно зарегестрировать домен?
Как правильно зарегистрировать домен что бы потом не увели? Может я параною :) А то зарегистрировал через хостера, получается что...

Зарегестрировать программу в меню пуск
Как программно зарегестрировать программу в меню пуск - если у кого нибудь ссылочки на доку. Средствами api желательно, чтобы универсально...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru