Я получаю ошибку несоответствия типов в моей проблеме оптимизации на основе Excel и VBA. Я использую пробную версию Frontline Solver, которую я использовал до прошлого года. Когда я запускаю код (который был небольшой модификацией моей предыдущей пробной версии), я получаю эту ошибку. Я знаю, что это может произойти, когда есть ошибка в ячейках Excel, формате или содержимом. В моем коде изначально я установил диапазон, который будет изменен, чтобы найти решение равным нулю. Ошибка появляется в строке ниже
SolverOK SetCell:="$H$31", MaxMinVal:=1, ByChange:=rngAll
. В этот момент линия фронта устанавливает эти диапазоны в определение диапазона, это выглядит как $ J $ 2: $ J $ 27, $ R $ 2: $ R $ 27, $Z $ 2: $ Z $ 27. Это может быть не важно, хотя.
Это целая функция
Sub LPOptimization1()
Dim LPOptimization1Sheet
Set LPOptimization1Sheet = Worksheets("LP Optimization 1")
Worksheets("LP Optimization 1").Activate
SolverReset
SolverOptions Precision:=0.001
Dim rng1, rng2, rng3, rngAllTemp, rngAll As Range
Set rng1 = Range("J2:J27")
Set rng2 = Range("R2:R27")
Set rng3 = Range("Z2:Z27")
rng1.Value = 0
rng2.Value = 0
rng3.Value = 0
'Relation 1 kucuk esit, 2 esit, 3 buyuk esit
Dim i As Integer
For i = 2 To 28 '22--> 24 26-->28
'Precaution X
If LPOptimization1Sheet.Cells(i, 7).Value <> "Non" Then
If LPOptimization1Sheet.Cells(i, 9).Value = "0" Then
SolverAdd CellRef:="$J$" & i & ":$J$" & i, Relation:=2, FormulaText:=1
End If
If LPOptimization1Sheet.Cells(i, 12).Value <> "" And IsNull(LPOptimization1Sheet.Cells(i, 12).Value) = False And IsEmpty(LPOptimization1Sheet.Cells(i, 12).Value) = False Then
SolverAdd CellRef:="$J$" & i & ":$J$" & i, Relation:=3, FormulaText:="$L$" & i & ":$L$" & i
End If
If LPOptimization1Sheet.Cells(i, 13).Value <> "" And IsNull(LPOptimization1Sheet.Cells(i, 13).Value) = False And IsEmpty(LPOptimization1Sheet.Cells(i, 13).Value) = False Then
SolverAdd CellRef:="$J$" & i & ":$J$" & i, Relation:=1, FormulaText:="$M$" & i & ":$M$" & i
End If
If LPOptimization1Sheet.Cells(i, 14).Value <> "" And IsNull(LPOptimization1Sheet.Cells(i, 14).Value) = False And IsEmpty(LPOptimization1Sheet.Cells(i, 14).Value) = False Then
SolverAdd CellRef:="$K$" & i & ":$K$" & i, Relation:=1, FormulaText:="$N$" & i & ":$N" & i
End If
Else
SolverAdd CellRef:="$J$" & i & ":$J$" & i, Relation:=2, FormulaText:=0
End If
'Precaution Y
If LPOptimization1Sheet.Cells(i, 15).Value <> "Non" Then
If LPOptimization1Sheet.Cells(i, 17).Value = "0" Then
SolverAdd CellRef:="$R$" & i & ":$R$" & i, Relation:=2, FormulaText:=1
End If
If LPOptimization1Sheet.Cells(i, 20).Value <> "" And IsNull(LPOptimization1Sheet.Cells(i, 20).Value) = False And IsEmpty(LPOptimization1Sheet.Cells(i, 20).Value) = False Then
SolverAdd CellRef:="$R$" & i & ":$R$" & i, Relation:=3, FormulaText:="$T$" & i & ":$T$" & i
End If
If LPOptimization1Sheet.Cells(i, 21).Value <> "" And IsNull(LPOptimization1Sheet.Cells(i, 21).Value) = False And IsEmpty(LPOptimization1Sheet.Cells(i, 21).Value) = False Then
SolverAdd CellRef:="$R$" & i & ":$R$" & i, Relation:=1, FormulaText:="$U$" & i & ":$U$" & i
End If
If LPOptimization1Sheet.Cells(i, 22).Value <> "" And IsNull(LPOptimization1Sheet.Cells(i, 22).Value) = False And IsEmpty(LPOptimization1Sheet.Cells(i, 22).Value) = False Then
SolverAdd CellRef:="$S$" & i & ":$S$" & i, Relation:=1, FormulaText:="$V$" & i & ":$V" & i
End If
Else
SolverAdd CellRef:="$R$" & i & ":$R$" & i, Relation:=2, FormulaText:=0
End If
'Precaution Z
If LPOptimization1Sheet.Cells(i, 23).Value <> "Non" Then
If LPOptimization1Sheet.Cells(i, 25).Value = "0" Then
SolverAdd CellRef:="$Z$" & i & ":$Z$" & i, Relation:=2, FormulaText:=1
End If
If LPOptimization1Sheet.Cells(i, 28).Value <> "" And IsNull(LPOptimization1Sheet.Cells(i, 28).Value) = False And IsEmpty(LPOptimization1Sheet.Cells(i, 28).Value) = False Then
SolverAdd CellRef:="$Z$" & i & ":$Z$" & i, Relation:=3, FormulaText:="$AB$" & i & ":$AB$" & i
End If
If LPOptimization1Sheet.Cells(i, 29).Value <> "" And IsNull(LPOptimization1Sheet.Cells(i, 29).Value) = False And IsEmpty(LPOptimization1Sheet.Cells(i, 29).Value) = False Then
SolverAdd CellRef:="$Z$" & i & ":$Z$" & i, Relation:=1, FormulaText:="$AC$" & i & ":$AC$" & i
End If
If LPOptimization1Sheet.Cells(i, 30).Value <> "" And IsNull(LPOptimization1Sheet.Cells(i, 30).Value) = False And IsEmpty(LPOptimization1Sheet.Cells(i, 30).Value) = False Then
SolverAdd CellRef:="$AA$" & i & ":$AA$" & i, Relation:=1, FormulaText:="$AD$" & i & ":$AD" & i
End If
Else
SolverAdd CellRef:="$Z$" & i & ":$Z$" & i, Relation:=2, FormulaText:=0
End If
Next i
'Total Cost
SolverAdd CellRef:="$D$31:$D$31", Relation:=1, FormulaText:="$B$31:$B$31"
SolverAdd CellRef:="$J$2:$J$27", Relation:=4, FormulaText:="integer"
SolverAdd CellRef:="$R$2:$R$27", Relation:=4, FormulaText:="integer"
SolverAdd CellRef:="$Z$2:$Z$27", Relation:=4, FormulaText:="integer"
'Set rng1 = Range("J2:J27")
'Set rng2 = Range("R2:R27")
'Set rng3 = Range("Z2:Z27")
'Set rngAllTemp = Application.Union(rng1, rng2)
'Set rngAll = Application.Union(rng1, rng2, rng3)
Set rngAll = Union([J2:J27], [R2:R27], [Z2:Z27])
'1 Maximize 2 Minimize 3 Match a Specific Value
SolverOK SetCell:="$H$31", MaxMinVal:=1, ByChange:=rngAll
SolverOptions MaxTime:=100000, Iterations:=10000, Precision:=0.0000001, AssumeLinear:=False, StepThru:=False, Estimates:=1, Derivatives:=1, SearchOption:=1, _
IntTolerance:=0, Scaling:=False, Convergence:=0.001, AssumeNonNeg:=True
SolverSolve UserFinish:=False
SolverFinish KeepFinal:=1
End Sub
Поскольку я использую пробную версию, у меня мало времени, чтобы решить эту проблему. Я буду очень рад услышать от людей, которые могут помочь ... Заранее спасибо ...
Ферда