Страницы: 1
RSS
setup excel
 
где то наткнулся на макрос который собирает данные о том какие библиотеки используются в книге, но не могу теперь его найти.  
можно ли сделать макрос-установщик, который бы сам собрал нужные файлы в архив или как и потом установил его  на другой комп? или может есть готовая какая то програмка?  
а то у меня на компе работает, а на работе нет.  
+ на работе 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  
 
Удачи
 
сасибо большое)  
воспользовался таким кодом:  
 
Private Sub VBProject_References()  
Dim iPath$, iFileName$, iCount%  
iPath$ = Environ("WinDir")  
iFileName$ = iPath$ & "\system32\MSmask32.OCX" 'MSMask  
iFileName$ = iPath$ & "\system32\quartz.dll"  
iFileName$ = iPath$ & "\System32\OCX\asctrls.ocx" 'ASControls  
 
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!!!)
 
Если я его определяю Dim oRef As Object  то потом я должен этот объект установить: Set oRef = CreateObject("А ТУТ ЧТО НАПИСАТЬ?")
С уважением, Алексей (ИМХО: 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!!!)
 
За Димой успеешь...
Я сам - дурнее всякого примера! ...
 
Серёга, привет.  
Я уже всё понял.  
Интерес чисто познавательный "Для ерундиции".  
Просто хотел упростить до  
With Create.Object(...)  
...  
End With
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
{quote}{login=Window 7}{date=12.03.2011 12:34}{thema=}{post}Смотрите.  
 
'программное подключение библиотеки  
'Вариант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 слишком длинная и не помещается в окне. В итоге не понятно какой же файл подключается.
 
Иллюстация ситуации - в приложенной картинке
 
Свойство .FullPath упоминается в Вашем коде.  
Запустите макрос  
 
Sub test()  
Dim r  
For Each r In ThisWorkbook.VBProject.References  
   Debug.Print r.Name, r.FullPath  
Next  
End Sub  
 
и увидите список путей в окне Immediate.  
Также можете проходить макрос по шагам (F8) и видеть все свойства объекта r в окне Locals.
 
{quote}{login=Казанский}{date=18.07.2011 12:54}{thema=}{post}Свойство .FullPath упоминается в Вашем коде.  
Запустите макрос  
 
Sub test()  
Dim r  
For Each r In ThisWorkbook.VBProject.References  
   Debug.Print r.Name, r.FullPath  
Next  
End Sub  
 
и увидите список путей в окне Immediate.  
Также можете проходить макрос по шагам (F8) и видеть все свойства объекта r в окне Locals.{/post}{/quote}  
 
 
Спасибо, всё работает!
Страницы: 1
Читают тему
Наверх