Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2009, 12:29   #1
kovalevskivf
Пользователь
 
Регистрация: 28.04.2009
Сообщений: 26
По умолчанию Проблема с программным запуском надстройки Solver

Суть проблемы в следующем. С помощью следующего макроса добавляю к проекту Solver. Здесь проблем нет.
Код:
Sub OpenSolver()
Dim St As String
On Error Resume Next
St = ThisWorkbook("SOLVER.XLA").Name
If Len(St) > 0 Then Exit Sub
St = ThisWorkbook.Application.path & "\Library\Solver\Solver.xla"
Workbooks.Open St
End Sub
Solver появляется в моем проекте, но когда я его запускаю с помощью следующего макроса, возникает ошибка.
Код:
Sub RunSolver()
     ThisWorkbook.Application.Run "Solver.xla!Auto_Open"
  End Sub
Появляется сообщение об ошибке компиляции, объект или библиотека не обнаружена, выделяется фрагмент кода "SolverOk", где происходит настройка Решателя.
Когда я иду в настройки VBA "Tools-References...", ничего не добавляя сразу жму ОК, все начинает работать.
Пожалуйста, подскажите, как избежать этой дополнительной настройки "Tools-References...". В чем тут дело?
kovalevskivf вне форума Ответить с цитированием
Старый 22.05.2009, 13:00   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

А не проще ли подключить Solver как надстройку (чтобы она постоянно загружалась вместе с Excel)?

Или, что ещё удобнее, в Tools-References для Вашего файла поставить ссылку на эту надстройку Solver.
Тогда Ваш код намного упрощается: во-первых, не потребуется открывать
эту надстройку программно (она будет открываться при запуске Вашего файла, то есть не потребуется макрос OpenSolver), да и обращаться к функциям надстройки будет намного легче:
Код:
Sub RunSolver()
    Auto_Open
End Sub
PS: Кстати, перед Application совсем необязательно ставить ThisWorkbook
EducatedFool вне форума Ответить с цитированием
Старый 22.05.2009, 15:13   #3
kovalevskivf
Пользователь
 
Регистрация: 28.04.2009
Сообщений: 26
По умолчанию

Цитата:
А не проще ли подключить Solver как надстройку (чтобы она постоянно загружалась вместе с Excel)?
А каким образом? То есть мой макрос вставить в Workbook_Open(). Или еще как? Подскажите пожалуйста.
Цитата:
Или, что ещё удобнее, в Tools-References для Вашего файла поставить ссылку на эту надстройку Solver.
Если я правильно понял, то необходимо открыть References и там поставить флаг Solver. Если так, то раньше я так и делал, но когда возникла проблема использования моей программы на разных компах, то приходилось мне самому вручную подключать эту надстройку. Конечно, после сохранения файла сохранялась и ссылка на Solver. Но в первый раз, после переноса программы на новый комп, приходилось эту процедуру проводить вручную.
Я, собственно, и хотел спросить, каким образом, без всяких манипуляций с Tools-References, в автоматическом режиме подключить эту надстройку.
Очень признателен за помощь!
kovalevskivf вне форума Ответить с цитированием
Старый 22.05.2009, 15:26   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
каким образом, без всяких манипуляций с Tools-References, в автоматическом режиме подключить эту надстройку.
Код:
Sub RemoveReference() ' удаляет ссылку на SOLVER
    For Each Ref In Application.VBE.ActiveVBProject.References
        'Debug.Print Ref.Name
        If Ref.Name = "SOLVER" Then Application.VBE.ActiveVBProject.References.Remove Ref
    Next
End Sub

Sub AddReference(): Found = False ' устанавливает ссылку на SOLVER
    Путь = Application.Path & "\Library\Solver\Solver.xla"
    For Each Ref In Application.VBE.ActiveVBProject.References
        'Debug.Print Ref.Name
        If Ref.Name = "SOLVER" Then Found = True
    Next
    If Not Found Then Application.VBE.ActiveVBProject.References.AddFromFile Путь
End Sub
Чтобы подключить SOLVER как надстройку, в Excel 2003 есть пункт меню Сервис - Надстройки
EducatedFool вне форума Ответить с цитированием
Старый 22.05.2009, 15:37   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

К примеру, пусть при запуске книги выполняется такой код:
Код:
Private Sub Workbook_Open()
    On Error Resume Next
    Application.VBE.ActiveVBProject.References.AddFromFile Application.Path & "\Library\Solver\Solver.xla"
    ОсновнойМакрос
End Sub
который будет устанавливать ссылку на надстройку, и запускать основной макрос типа этого:
Код:
Sub ОсновнойМакрос()
    Auto_Open
    Main
End Sub
В данном примере Auto_Open и Main - макросы из надстройки Solver
EducatedFool вне форума Ответить с цитированием
Старый 22.05.2009, 19:53   #6
kovalevskivf
Пользователь
 
Регистрация: 28.04.2009
Сообщений: 26
По умолчанию

Вот то что было мне и нужно. Огромное спасибо за помощь!
kovalevskivf вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с запуском программы K[Lanc]N Помощь студентам 5 21.02.2009 22:49
Проблема с запуском Rio309 Компьютерное железо 6 21.02.2009 00:43
Проблема с запуском boroda Помощь студентам 5 11.01.2009 11:52
проблема с запуском Delphi6 xen Общие вопросы Delphi 2 18.03.2007 01:16