Я являюсь старшим пользователем VBA, и у меня проблемы с Excel Solver.Excel Solver заканчивается, прежде чем найти решение - VBA
В основном я должен рассчитать справедливую стоимость нескольких финансовых инструментов, сгруппированных по стране происхождения.
Для каждой страны решатель минимизирует функцию, чтобы найти параметры модели.
До сих пор я смог заставить его работать, и среди 50 разных стран/категорий решатель работает в 49 случаях.
Приходит моя проблема, когда дело доходит до этой страны, решатели выходят после 3 или 4 итераций. оставив объективную функциональность далеко не минимизированной. Но когда я нажимаю на командную кнопку, связанную точно с той же подпрограммой, она находит решение.
Вот часть моего кода, NSCoeff является подразделением, связанным с решателем.
Sub NelsonSiegel()
Dim a, b, c, d, e, f, g, p, s, I, t, v, pv, TIR As Variant
Dim NumBonds, bnd_cnt As Integer
Dim current_wb As String
Dim spot(), df, dfcf, NumberCashFlows, Lambda, Lambda2, Beta1, Beta2, Beta3, Beta4, TimeToCashFlow(), NSPV As Variant
Dim j As Integer
Dim Time() As Variant
Dim A1() As Variant
Dim A2() As Variant
Dim A3() As Variant
Dim A4() As Variant
current_wb = ThisWorkbook.Name
NumBonds = Sheets("bonds").Cells(1, 7).Value
Workbooks(current_wb).Sheets("Nelson_Siegel").Range("n4:s4").Value = 1
NSCoeff
Workbooks(current_wb).Sheets("bonds").Calculate 'download coupon date for NS procedure
Lambda = Worksheets("model").Cells(28, 2)
Beta1 = Worksheets("model").Cells(29, 2)
Beta2 = Worksheets("model").Cells(30, 2)
Beta3 = Worksheets("model").Cells(31, 2)
Beta4 = Worksheets("model").Cells(32, 2)
Lambda2 = Worksheets("model").Cells(33, 2)
и здесь NSCoeff суб
Sub NSCoeff()
Dim current_wb As String
current_wb = ThisWorkbook.Name
Workbooks(current_wb).Sheets("Nelson_Siegel").Activate
SolverOk SetCell:="$N$9", MaxMinVal:=2, ValueOf:=0, ByChange:="$N$4:$S$4", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverAdd CellRef:="$N$4", Relation:=3, FormulaText:="0.001"
SolverAdd CellRef:="$S$4", Relation:=3, FormulaText:="0.001"
SolverOk SetCell:="$N$9", MaxMinVal:=2, ValueOf:=0, ByChange:="$N$4:$S$4", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverOk SetCell:="$N$9", MaxMinVal:=2, ValueOf:=0, ByChange:="$N$4:$S$4", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve userFinish:=True
Любая идея о том, как решить эту проблему? Решатель не находит решение, когда запускается из другой подпрограммы, но когда он запускается из командной строки, он работает.
Спасибо за помощь
Это хороший совет, я пытался поймать значение 'SolverSolve' и значение при первом запуске (тот, который заканчивается до того времени) является Solver нашел решение. Все условия и условия оптимальности выполнены. Когда я нажимаю «CommandButton», я получаю 1 Solver сходится к текущему решению. Все ограничения выполнены. Я до сих пор не знаю, почему это происходит, какие-то мысли? –