Страницы: 1
RSS
Проверка из vba регистрации библиотеки c:\Windows\System32\mscomct2.ocx (?), Можно ли из vba проверить регистрацию на РС библиотеки mscomct2.ocx ?
 
Здравствуйте уважаемые форумчане.

Есть экселевский файл с vba-кодом использующим контролсы из библиотеки c:\Windows\System32\Mscomct2.ocx
На РС где эта библиотека зарегистрирована  vba-код работает, если библиотека не зарегистрирована - валятся ошибки.
Хочу вставить проверку регистрации  этой библиотеки в процедуру Workbook_Open() срабатывающую при открытии экселевского файла и, если регистрации библиотеки в системе нет, выводить соотвествующий MsgBox и закрывать файл с кодом.
Есть ли возможность из vba-кода проверить зарегистрована ли на РС библиотека mscomct2.ocx?
Пож-та, подскажите код.

Спасибо за помощь / совет.
 
Ставите галку на свою библиотеку в проекте и потом отслеживаете при открытии книги её на MISSING.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
кроме того - можно и зарегистрировать, при наличии самого файла, конечно.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Спасибо за ваши ответы.  
ikki : сама ocx-библиотека конечно же имеется, только вот зарегистрировать её самостоятельно не получится, т.к. нет административных прав. Нужно обращаться к админам.

The_Prist :  прочитал статью по вашей ссылке, спасибо!
Скажите, пож-та, как изменить предложенный вами код процедуры Remove_MISSING() для проверки наличия регистрации на РС только библиотеки c:\Windows\System32\Mscomct2.ocx? Такое возможно? Спасибо.
Код
Sub Remove_MISSING()
 Dim oReferences As Object, oRef As Object
 Set oReferences = ThisWorkbook.VBProject.References
 For Each oRef In oReferences
 If (oRef.IsBroken) Then oReferences.Remove Reference:=oRef
 Next
End Sub
 
Совет: отказаться от использования контролов из этой библиотеки (и других нестандартных)

либо делать дистрибутив (установочный exe файл) к вашему файлу Excel (я использовал бесплатную утилиту InnoSetup - она установит и зарегистрирует нужные библиотеки


вы для себя этот файл Excel делаете (использовать на нескольких компах), или для распространения?

Цитата
Хочу вставить проверку регистрации этой библиотеки в процедуру Workbook_Open()
плохая идея
1) код может не сработать из-за ошибки компиляции
2) ну проверите вы, нет библиотеки, - дальше-то что? работать же файл не будет всё равно...
из макроса вы же не сможете зарегить библиотеку (т.к. нет админских прав)

в 99% случаев, без нестандартных компонентов можно легко обойтись
Изменено: Игорь - 14.08.2014 18:28:56
 
Игорь
Экселевский файл не для себя, для коллективного использования внутри организации. Так получилось, что эта  библиотека (c:\Windows\System32\Mscomct2.ocx) была задействована с самого начала написания кода. Сейчас уже и не переписать всё  что там награмождено под штатные осx-ы :-(
Сделать дистрибутив тема интересная, спасибо. На сколько я понимаю, там всё равно понадобятся административные права на регистрацию ocx-библиотеки входящей в дистрибутив. Прав админских на мне, ни пользователям работающим с этим файлом не дадут.
Мне бы, для начала,  программно отследить отсутствие подключённой библиотеки c:\Windows\System32\Mscomct2.ocx
Спасибо.
 
просто объясните, зачем отслеживать проблему, если исправить её в любом случае не получится???

покажите свой файл - может, не всё настолько плохо...
 
Игорь,
Мне было бы достаточно вывести  MsgBox о необходимости регистрации именно этой библиотеки в системе. Там бы "понятным языком" и была изложена проблема. Согласен с вами :  в любом случае, придётся обращаться к айтишникам за админскими правами для её регистрации в системе.
Переписывать vba-код под штатные экселевские ocx-ы не годится, он достаточно объёмен.
Вероятно, задачу наскоком не решить, подумаю что можно сделать.
Давайте тему закроем. Всем откликнувшимся - БОЛЬШОЕ спасибо !  :-)
 
Цитата
AndyGrouve пишет:
как изменить предложенный вами код процедуры Remove_MISSING() для проверки наличия регистрации на РС
Код
Sub CheckReference()
    Dim oReferences As Object, oRef As Object, bInst As Boolean
    Set oReferences = ThisWorkbook.VBProject.References
    For Each oRef In oReferences
        If LCase(oRef.Name) = "mscomct2" Then bInst = True
    Next
    If Not iInst Then
        MsgBox "Не установлена библиотека mscomct2", vbCritical, "Error"
    End If
End Sub
Только сначала посмотрите в цикле какое отражается имя у библиотеки "mscomct2" и с ним сравнивайте(в нижнем регистре надо имя записать). Я чисто из воздуха взял.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist
Это то, что нужно! Результат достигнут, большое вам спасибо!   :)
 
Здравствуйте.
На компьютере была подключена некая библиотека Autocad к файлу Excel.
Файл перенесли на другой компьютер, где, соответственно, нет этой библиотеки.
В результате в Tools-References появляется MISSING.
С помощью макроса, предложенного Дмитрием, пыталась удалить отключенную библиотеку, однако, появляется ошибка "Object library not registered", и MISSING все равно остается.
Как решить данный вопрос с помощью vba?
Спасибо.
 
Наверное, в таком случае остается попробовать последний код с проверкой имени библиотеки и если она битая - выводить пользователю инструкцию по устранению...
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо, конечно. Инструкция - как вариант, но дело в том что проект VBA защищен будет, т.е. скомпилирован, вот и пытаюсь поэтому средствами vba...
Страницы: 1
Наверх