Тема: Как узнать есть ли на компьютере версия AutoCAD по известному GIUD
Придумал небольшой способ адаптировать программы к разным версиям AutoCAD! Просто надо выбрать версию с которой работаем из списка. Но вот заполняется пока этот список всеми возможными версиями AutoCAD и если выбрать из этого списка версию которая не установлена на компьютере или файл библиотеки которой не зарегистрирован то файл программы Excel перестаёт компилироваться так как он отключается от рабочей библиотеки и не подключается к не найденой. Чтобы избежать подобных ситуаций надо заполнять список только имеющимися версиями AutoCAD. Для этого надо по известному GUID библиотеки найти зарегистрирована эта бибилиотека в системе или нет. Если зарегистрирована то добавлять в список а если нет то не добавлять.
Private Sub ComboBox1_ВерсияAutoCAD_Click() strНачВерсияAutoCAD = ComboBox1_ВерсияAutoCAD End Sub Private Sub ComboBox1_ВерсияAutoCAD_Change() Dim objReferences As Object On Error Resume Next 'Отключим библиотеку не используемой версии AutoCAD Select Case strНачВерсияAutoCAD Case "AutoCAD2000" 'Отключение библиотеки типов AutoCAD2000 Application.VBE.ActiveVBProject.References.Remove (ReferenceFromGuid("{C094C1E2-57C6-11D2-85E3-080009A0C626}")) Case "AutoCAD2006" 'Отключение библиотеки типов AutoCAD2006 Application.VBE.ActiveVBProject.References.Remove (ReferenceFromGuid("{1EFD8E85-7F3B-48E6-9341-3C8B2F60136B}")) Case "AutoCAD2007" 'Отключение библиотеки типов AutoCAD2007 Application.VBE.ActiveVBProject.References.Remove (ReferenceFromGuid("{851A4561-F4EC-4631-9B0C-E7DC407512C9}")) End Select 'Подключим библиотеку используемой версии AutoCAD Select Case ComboBox1_ВерсияAutoCAD Case "AutoCAD2007" 'Подключение библиотеки типов AutoCAD2007 Set objReferences = Application.VBE.ActiveVBProject.References.AddFromGuid("{851A4561-F4EC-4631-9B0C-E7DC407512C9}", 1, 1) If TypeOf objReferences Is Object Then If Not objReferences.isbroken Then MsgBox "AutoCAD2007 подключён", vbInformation, gstrНазваниеПрограммы End If Case "AutoCAD2006" 'Подключение библиотеки типов AutoCAD2006 Set objReferences = Application.VBE.ActiveVBProject.References.AddFromGuid("{1EFD8E85-7F3B-48E6-9341-3C8B2F60136B}", 1, 1) If TypeOf objReferences Is Object Then If Not objReferences.isbroken Then MsgBox "AutoCAD2006 подключён", vbInformation, gstrНазваниеПрограммы End If Case "AutoCAD2000" 'Подключение библиотеки типов AutoCAD2000 Set objReferences = Application.VBE.ActiveVBProject.References.AddFromGuid("{C094C1E2-57C6-11D2-85E3-080009A0C626}", 1, 1) If TypeOf objReferences Is Object Then If Not objReferences.isbroken Then MsgBox "AutoCAD2000 подключён", vbInformation, gstrНазваниеПрограммы End If End Select End Sub Private Function ReferenceFromGuid(strGuid As String) As Variant Dim objReference As Object For Each objReference In Application.VBE.ActiveVBProject.References If objReference.GUID = strGuid Then Set ReferenceFromGuid = objReference Exit Function End If Next End Function
Добавление библиотек в список происходит при открытии рабочей книги Excel:
Private Sub Workbook_Open() Dim objReferences As Object ActiveWorkbook.Sheets(1).ComboBox1_ВерсияAutoCAD.AddItem "AutoCAD2000" ActiveWorkbook.Sheets(1).ComboBox1_ВерсияAutoCAD.AddItem "AutoCAD2002" ActiveWorkbook.Sheets(1).ComboBox1_ВерсияAutoCAD.AddItem "AutoCAD2004" ActiveWorkbook.Sheets(1).ComboBox1_ВерсияAutoCAD.AddItem "AutoCAD2006" ActiveWorkbook.Sheets(1).ComboBox1_ВерсияAutoCAD.AddItem "AutoCAD2007" On Error Resume Next Select Case ActiveWorkbook.Sheets(1).ComboBox1_ВерсияAutoCAD Case "AutoCAD2007" 'Подключение библиотеки типов AutoCAD2007 Set objReferences = Application.VBE.ActiveVBProject.References.AddFromGuid("{851A4561-F4EC-4631-9B0C-E7DC407512C9}", 1, 1) Case "AutoCAD2006" 'Подключение библиотеки типов AutoCAD2006 Set objReferences = Application.VBE.ActiveVBProject.References.AddFromGuid("{1EFD8E85-7F3B-48E6-9341-3C8B2F60136B}", 1, 1) Case "AutoCAD2000" 'Подключение библиотеки типов AutoCAD2000 Set objReferences = Application.VBE.ActiveVBProject.References.AddFromGuid("{C094C1E2-57C6-11D2-85E3-080009A0C626}", 1, 1) End Select End Sub
В этой процедуре и надо проверять по известному GUID наличие библиотек в системе. Как это сделать? Может быть есть специальные функции API?