Недавно столкнулся с ситуацией, когда в присланном файле не обнаружил на пользовательских формах(UserForms) элементов RefEdit.
Кто не в курсе, данный контрол предназначен для указания диапазона ячеек. По умолчанию он отсутствует в стандартном наборе контролов на форме Toolbox, но его легко добавить: Tools- Additional Controls- RefEdit(или RefEdit.Ctrl)
Естественно, формы в файле не работали должным образом и при вызове выдавали ошибку, ругаясь на отсутствие контрола. Я лично грешу, что произошло это у меня после обновления офиса до версии RU-EN(ранее была только RU). Странно все это, конечно. Если бы это было ошибкой библиотеки контрола - была бы хоть какая-то ошибка при запуске проекта(как правило "Could not load an object because it is not available on this machine"). Поэтому я решил удалить старый контрол RefEdit из Toolbox и добавить его заново. И, о чудо! Ничего не случилось. Контрол есть в Toolbox, но нет в файле. Что интересно - при попытке самому добавить на любую форму данный контрол появлялось сообщение "Субъект не имеет доверия для выполнения указанного действия":
Первое, что я сделал, это посмотрел в реестре, зарегистрирован ли данный компонент и все ли там на месте. Я использовал утилиту "oleview" от Microsoft, которая позволяет просмотреть все компоненты на ПК. В реестре он присутствовал и вроде все регистрационные данные были верными. Тогда я скопировал его CLSID и решил посмотреть есть ли он среди доверенных компонентов ActiveX в ветках реестра:
HKEY_CURRENT_USER\Software\Microsoft\VBA\Security
Вроде бы все нормально. Зашел до кучи в эти ветки:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Common\COM Compatibility\
Изначально там было значение 400. Заменил на 0. Ничего не поменялось, ошибка не исчезла.
Потратив еще часок на это недоразумение меня посетила мысль начать с самого простого: настройки Excel(Excel 2010). Я зашел в:
Файл -Параметры -Центр управления безопасностью -Параметры центра управления безопасностью -Параметры ActiveX
в Excel 2007 этот параметр расположен в:
Меню -Параметры Excel -Центр управления безопасностью -Параметры центра управления безопасностью -Параметры ActiveX
и установил "Запрос перед включением всех элементов управления с минимальными ограничениями". Можно так же установить "Включить все элементы управления без ограничений и запросов".
И вот тогда все заработало. Как же оказывается все просто. А я, дурак, лез в реестр, искал, копошил, сверял...Хотя, надо сказать в свое оправдание, что было уже такое, когда Microsoft выпустила обновление системы KB960715. Некоторые контролы вели себя таким же образом после данного обновления и устранить можно было только через реестр. Кстати, для Excel 2003 эта проблема решается вообще только через правку реестра(
Надеюсь, эта статья поможет еще кому-нибудь для решения данной проблемы.
Так же см.:
Microsoft лишил Excel 2007 и 2010 элементов ActiveX
У меня ХР/3
Excel 2010/Professional
Выполнил: Меню -Параметры Excel -Центр управления безопасностью -Параметры центра управления безопасностью -Параметры ActiveX
"Включить все элементы управления без ограничений и запросов".
Собственно, с этого начинал.
Мало того, затем в реестре записал ключ
(файлик mscomm.reg)
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905]
@="kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun"
Все безрезультатно: субъект не приобрел доверия.
Alexander, в принципе основной пункт это "Запрос перед включением всех элементов управления с минимальными ограничениями", а не "Включить все элементы управления без ограничений и запросов". Если его тоже установили и после перезапуска Excel ничего не поменялось - то у меня идей нет.