Ошибка несоответствия типов в коде VBA при оптимизации решателя - PullRequest
2 голосов
/ 31 октября 2019

Я получаю ошибку несоответствия типов в моей проблеме оптимизации на основе 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

Поскольку я использую пробную версию, у меня мало времени, чтобы решить эту проблему. Я буду очень рад услышать от людей, которые могут помочь ... Заранее спасибо ...

Ферда

...