где то наткнулся на макрос который собирает данные о том какие библиотеки используются в книге, но не могу теперь его найти. можно ли сделать макрос-установщик, который бы сам собрал нужные файлы в архив или как и потом установил его на другой комп? или может есть готовая какая то програмка? а то у меня на компе работает, а на работе нет. + на работе 7 вндовс поставили. это как то может повлиять на работоспособность кода вба?
1) этот код выдаёт список подключенных библиотек (в окно Immediate Window)
Sub Test() Dim r As Reference For Each r In Application.VBE.ActiveVBProject.References Debug.Print r.Name Next End Sub
Чтобы он заработал, нужно: - необходимо подключить библиотеку Microsoft Visual Basic for Applications Extensibility 5.3 в меню Tools - References...
- а так же нужно поставить галочку ... не помню как называется, вроде, "Доверять доступ к объектной модели проектов VBA" (Trust programmatic access to Visiual Basic Project). Включается в Excel 2003 - меню Сервис - Макрос - Безопасность - там где-то в вкладках. В Excel 2010 - Файл - параметры - Центр управления безопасностью - Параметры центра управления безопасностью - поставить галочку "Доверять доступ к объектной модели проектов VBA"
Таким образом мы выяснить какие библиотеку в данный момент подключены.
2_ А подключаются библиотеки таким образом Вот 2 варианта с ссылками:
'Вариант1 'Source: http://www.planetaexcel.ru/forum.php?thread_id=5502 Sub WordRefOn() Dim WordLibFullName As String On Error Resume Next With Application WordLibFullName = .Path & .PathSeparator & "MSWORD.OLB" End With With ThisWorkbook.VBProject .References.Remove .References("Word") ' Off Err = 0 .References.AddFromFile WordLibFullName ' On End With If Err <> 0 Then MsgBox "Необходимо разрешить доступ к Visual Basic Project" & vbCr _ & "(меню Сервис-Макрос-Безопасность-Надежные издатели)", vbInformation End Sub
'программное подключение библиотеки 'Вариант2 'Source: http://msoffice.nm.ru/faq/macros/module.htm#faq179 Option Compare Text Private Sub VBProject_References() Dim iPath$, iFileName$, iCount% iPath$ = Environ("WinDir") 'iFileName$ = iPath$ & "\System32\Scrrun.dll" 'Microsoft Scripting Runtime 'iFileName$ = iPath$ & "\System32\FM20.dll" 'Microsoft Forms 2.0 Object Library With Application iFileName$ = .Path & .PathSeparator & "MSWORD.OLB" 'Microsort Word 11.0 Object Library End With If Dir(iFileName$) <> "" Then With ThisWorkbook.VBProject.References For iCount% = 1 To .Count If .Item(iCount%).FullPath = iFileName$ Then MsgBox "Эта библиотека уже подключена", , "" Exit Sub End If Next .AddFromFile Filename:=iFileName$ End With Else MsgBox "Отсутствует нужный файл", , "" Exit Sub End If MsgBox "Библиотека подключена!", 64, "" End Sub
If Dir(iFileName$) <> "" Then With ThisWorkbook.VBProject.References For iCount% = 1 To .Count If .Item(iCount%).FullPath = iFileName$ Then MsgBox iFileName$ & "- Эта библиотека уже подключена", , "" Exit Sub End If Next .AddFromFile Filename:=iFileName$ End With Else MsgBox iFileName$ & "- Отсутствует нужный файл", , "" Exit Sub End If MsgBox iFileName$ & "- Библиотека подключена!", 64, "" End Sub
но он добавляет/проверяет только одну библиотеку (в данном случае "\System32\OCX\asctrls.ocx" 'ASControls - ту которая последняя в списке). а как сделать чтоб все закинутые?
Не вникая в логику кода, сразу видно, что вы три раза подряд задаёте разные значения переменной iFileName iFileName$ = iPath$ & "\system32\MSmask32.OCX" 'MSMask iFileName$ = iPath$ & "\system32\quartz.dll" iFileName$ = iPath$ & "\System32\OCX\asctrls.ocx" 'ASControls И в результате вы задаёте ей то самое значение, по которому должна подключаться библиотека ASControls Остальные библиотеки ваш код даже и не пытается подключать. Загоните эти значения в массив, коллекцию или словарь, а потом циклом по всем его элементам подключайте по одной все библиотеки.
С уважением, Алексей(ИМХО: Excel-2003 - THE BEST!!!)
К стати, Window 7, а не подскажете как обойтись без раннего связывания библиотеки Microsoft Visual Basic for Applications Extensibility 5.3?
В смысле как объявлять переменную, которая должна быть As Reference, при позднем связывании: Dim oRef As Object : Set oRef = CreateObject("????????????????")
С уважением, Алексей(ИМХО: Excel-2003 - THE BEST!!!)
{quote}{login=Alex_ST}{date=17.03.2011 09:32}{thema=}{post}...как обойтись без раннего связывания библиотеки Microsoft Visual Basic for Applications Extensibility 5.3?
т.е. как объявлять переменную, которая должна быть As Reference, при позднем связывании: Dim oRef As Object : Set oRef = CreateObject("????????????????"){/post}{/quote}
Гуру-учителя! Ну, научите, плиз, ... Честно рылся-искал в И-нете... Ничего нет. Про саму библиотеку - много, а про позднее связывание её - не нашел ничего :(
С уважением, Алексей(ИМХО: Excel-2003 - THE BEST!!!)
Привет, Леш. Честно, не понимаю чего ты хочешь(и для чего). Попробуй: Sub Test() Dim r As Object 'Было: Reference For Each r In Application.VBE.ActiveVBProject.References Debug.Print r.Name Next End Sub Без раннего связывания. Или я не о том?
Дмитрий, признаю свою невнимательность... Посыпаю бороду пеплом... Прошу прощения. Посмотрел по ссылке. Завтра на работе доделаю срочный файл и попробую ваш вариант.
С уважением, Алексей(ИМХО: Excel-2003 - THE BEST!!!)
'программное подключение библиотеки 'Вариант2 'Source: http://msoffice.nm.ru/faq/macros/module.htm#faq179 Option Compare Text Private Sub VBProject_References() Dim iPath$, iFileName$, iCount% iPath$ = Environ("WinDir") 'iFileName$ = iPath$ & "\System32\Scrrun.dll" 'Microsoft Scripting Runtime 'iFileName$ = iPath$ & "\System32\FM20.dll" 'Microsoft Forms 2.0 Object Library With Application iFileName$ = .Path & .PathSeparator & "MSWORD.OLB" 'Microsort Word 11.0 Object Library End With If Dir(iFileName$) <> "" Then With ThisWorkbook.VBProject.References For iCount% = 1 To .Count If .Item(iCount%).FullPath = iFileName$ Then MsgBox "Эта библиотека уже подключена", , "" Exit Sub End If Next .AddFromFile Filename:=iFileName$ End With Else MsgBox "Отсутствует нужный файл", , "" Exit Sub End If MsgBox "Библиотека подключена!", 64, "" End Sub
Удачи{/post}{/quote}
Подскажите, пожалуйста, как определить полный путь к выбранной библиотеке в VBAProject, (Tools\References...)? В появляющемся окне при выборе конкретной библиотеки ниже появляется её описание с названием и путём (Location), указывающем какой именно файл используется и где именно он лежит. Однако в некоторых случаях строка Location слишком длинная и не помещается в окне. В итоге не понятно какой же файл подключается.