Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Автоматизация в Excel Сервис->Поиск решения  (Прочитано 24382 раз)
0 Пользователей и 7 Гостей смотрят эту тему.
djozzz
Гость
« : 10-04-2007 11:14 » 

Привет! Такой вопрос: Надо в Еxcel автоматизировать функцию "Поиск решения". Я нашел каким образом проверить установлен ли он и каким образом можно задавать параметры (узнал через запись макроса и последующий поиск решения). Теперь не могу понять каким образом можно с макроса запустить этот Поиск Решения. При запуске макроса выдаёт следующее - Не определена функция или процедура. Если создать объект через ADDIn (позволяющий проверить  установлен ли он - нашел в хелпе мелкософта) и через точку прописать эти самые процедуры, то пишет что объект не имеет таких свойств или методов. Кто знает как это делается, помогите! 
Записан
djozzz
Гость
« Ответ #1 : 12-04-2007 12:43 » 

Приветик всем!
Мне хотелось бы несколько конкретизировать свой вопрос:
проверить установлен ли "Поиск решения" можно следующим образом:

If AddIns("Поиск решения").Installed = False Then AddIns("Поиск решения").Installed = True

задавать параметры можно так (из макроса):

    SolverOk SetCell:="$E$4", MaxMinVal:=3, ValueOf:="0", ByChange:="$G$7:$G$9"
    SolverAdd CellRef:="$G$7", Relation:=1, FormulaText:="$G$8"
    SolverAdd CellRef:="$G$8", Relation:=3, FormulaText:="$G$9"
    SolverSolve

именно в данном случае выдаётся ошибка - Не определена функция или процедура

Я взломал спомощью AVPR пароль и экпортировал тексты всех макроссов из библиотеки мелкософта в свой файл. Параметры передаются, но макросы вылетают с непонятной ошибкой.
Попытка вызвать макросы напрямую с надстройки мелкософта (SOLVER), тоже не получилась, т.к. параметры функций в данном случае вообще не передаются (возникает ошибка с передачей параметров типа "Переменная:=значение").
Может кто знает как передать параметры именно таким способом (в макросах мелкософта анализируются параметры именно по участку "Переменная:=").

Кто хочет подробне обсудить данный вопрос - добро пожаловать в ICQ, хотя логичнее было бы здесь.
« Последнее редактирование: 12-04-2007 13:10 от djozzz » Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #2 : 13-04-2007 14:23 » 

выложите свой файл
будет время покапаюсь
Записан

I Have Nine Lives You Have One Only
THINK!
djozzz
Гость
« Ответ #3 : 13-04-2007 15:13 » 

to HandKot

сюда _ftp://82.179.20.33/incoming/solver
или сюда _ftp://82.179.20.33/incoming/solver2
« Последнее редактирование: 13-04-2007 15:15 от djozzz » Записан
djozzz
Гость
« Ответ #4 : 15-04-2007 05:31 » 

Да, чуть не забыл.. Конечный вариант данного кода не должен нарушать прав мелкософта, т.к. данная работа будет использована в дипломной работе.
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #5 : 16-04-2007 10:04 » 

Ну Вы почти все сделали, только не довели до конца
Вот мой вариант и прав ничьих вроде не нарушает
Код:
Sub MySolver()
    Dim wbSolv As Workbook
   
    'подключаем "Поиск решений"
    On Error Resume Next
    Set wbSolv = Workbooks("Solver.xla")
   
    On Error GoTo EH
    If wbSolv Is Nothing Then
        Set wbSolv = Workbooks.Open(ThisWorkbook.Path & "\Solver.xla")
    End If

    'Инициализируем
    Application.Run "Solver.xla!Auto_Open"
    Application.Run "Solver.xla!SolverReset"
   
    'Данные для расчета
    Application.Run "Solver.xla!SolverOk", "$E$4", 3, 0, "$G$7:$G$9"
    Application.Run "Solver.xla!SolverAdd", "$G$7", 1, "$G$8"
    'Application.Run "Solver.xla!SolverAdd", "$G$8", 3, "$G$9"
    Application.Run "Solver.xla!SolverSolve"
   
    Exit Sub
EH:
    MsgBox Err.Source & "~" & Err.Description
End Sub

Пробуйте
Записан

I Have Nine Lives You Have One Only
THINK!
djozzz
Гость
« Ответ #6 : 17-04-2007 03:03 » 

А можно как-нибудь в Excel узнать папку в которой он установлен? (для того, чтобы не носить с собой Solver.xla, а запускать его с папки самого офиса)
Записан
djozzz
Гость
« Ответ #7 : 17-04-2007 06:20 » 

Я доделал то, что спрашивал. Конечный код выглядит так:

Sub MySolver()
    'Dim wbSolv As Workbook
   
    'подключаем "Поиск решений"
    'On Error Resume Next
    'Set wbSolv = Workbooks("Solver.xla")
   
    'On Error GoTo EH
    'If wbSolv Is Nothing Then
    '    Set wbSolv = Workbooks.Open(ThisWorkbook.Path & "\Solver.xla")
    'End If
   
    If AddIns("Поиск решения").Installed = False Then AddIns("Поиск решения").Installed = True

    'Инициализируем
    Application.Run "Solver.xla!Auto_Open"
    Application.Run "Solver.xla!SolverReset"
   
    'Данные для расчета
    Application.Run "Solver.xla!SolverOk", "'[solver__book.xls]Лист1'!$E$4", 3, 279, "'[solver__book.xls]Лист1'!$G$7:$G$9"
    Application.Run "Solver.xla!SolverAdd", "'[solver__book.xls]Лист1'!$G$7", 1, "'[solver__book.xls]Лист1'!$G$8"
    Application.Run "Solver.xla!SolverAdd", "'[solver__book.xls]Лист1'!$G$8", 3, "'[solver__book.xls]Лист1'!$G$9"
    Application.Run "Solver.xla!SolverSolve", True
    'Application.Run "Solver.xla!SolverSave", "'[solver__book.xls]Лист1'!$A$1"
   
    Exit Sub
EH:
    MsgBox Err.Source & "~" & Err.Description
End Sub

Спасибо за помощь.
Записан
djozzz
Гость
« Ответ #8 : 18-04-2007 07:48 » 

Хотя этот код как-то странно работает... На одной машине работает, а на другой пишет, что целевая ячейка должна быть единственной, но при пошаговом выполнении всё ОК.

А вместо строки:

If AddIns("Поиск решения").Installed = False Then AddIns("Поиск решения").Installed = True

надо написать:

AddIns("Поиск решения").Installed = False
AddIns("Поиск решения").Installed = True

Странно.. Может дело в каких-нибудь настройках???
« Последнее редактирование: 18-04-2007 07:53 от djozzz » Записан
djozzz
Гость
« Ответ #9 : 18-04-2007 11:15 » 

Этот код работает нормально (тьфу-тьфу):

Sub MySolver()
    Dim wbSolv As Workbook
    
    'подключаем "Поиск решений"
    On Error Resume Next
    Set wbSolv = Workbooks("Solver.xla")
    
    On Error GoTo EH
    If wbSolv Is Nothing Then
        Set wbSolv = Workbooks.Open(AddIns("Поиск решения").FullName)
    End If
  
    'Инициализируем
    Application.Run "Solver.xla!Auto_Open"
    Application.Run "Solver.xla!SolverReset"
    
    'Данные для расчета
    'pth = "'[" + ThisWorkbook.Name + "]" + ThisWorkbook.ActiveSheet.Name + "'!"
        
    Application.Run "Solver.xla!SolverOk", "'[Solver_book.xls]Лист1'!$E$4", 3, 279, "'[Solver_book.xls]Лист1'!$G$7:$G$9"
    Application.Run "Solver.xla!SolverAdd", "'[Solver_book.xls]Лист1'!$G$7", 1, "'[Solver_book.xls]Лист1'!$G$8"
    Application.Run "Solver.xla!SolverAdd", "'[Solver_book.xls]Лист1'!$G$8", 3, "'[Solver_book.xls]Лист1'!$G$9"
    Application.Run "Solver.xla!SolverSolve", True
    Application.Run "Solver.xla!SolverSave", "'[Solver_book.xls]Лист1'!$A$1"
    
    Exit Sub
EH:
    MsgBox Err.Source & "~" & Err.Description

End Sub
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines