|
 |
 |
 |
|
|
|
 | |  |
 | |  |
 | |  |
 | |  |
 | |  |
 |
|
BWEINL |
Medlem sedan: 2020-01-31
2 inlägg
|
|
|
Hej, Skapade för ett tag sedan en VBA kod för att simulera problemlösaren. Allt fungerade bra i början, sedan lade jag till en "IF" funktion för att skapa tre olika scenarion och då funkade allt okej till en början. Två av mina tre "IF" scenarion fungerade. Nu fungerar ingenting och jag vet inte varför. Min kod ser ut enligt nedan: Sub XXXX_Calculator()
Worksheets("OOOOO").Activate
If Cells(4, 7) = "X1" Then
SolverOk SetCell:="$E$33", MaxMinVal:=3, ValueOf:="I5", ByChange:="$I$6", Engine _ :=1, EngineDesc:="GRG Nonlinear"
ElseIf Cells(4, 7) = "X2" Then
SolverOk SetCell:="$E$33", MaxMinVal:=3, ValueOf:="I5", ByChange:="$I$4", Engine _ :=1, EngineDesc:="GRG Nonlin1ear" SolverAdd CellRef:="E42", Relation:=2, FormulaText:="I6"
ElseIf Cells(4, 7) = "X3" Then
SolverOk SetCell:="$E$33", MaxMinVal:=3, ValueOf:="I5", ByChange:="$I$4", Engine _ :=1, EngineDesc:="GRG Nonlinear" SolverAdd CellRef:="E33", Relation:=2, FormulaText:="I5" End If
SolverSolve
SolverReset
Application.Calculation = xlAutomatic
End Sub
Felmeddelandet som jag får upp lyder: Fel i modellen, kontrollera celler och begränsningar. Några celler som inte är variabla är kanske markerade som heltal, binära eller allaolika.
Kan tillägga att när jag kör problemlösaren manuellt genom verktygsfältet med samma variabler så funkar allt perfekt.
Tacksam för all hjälp!
|
|
|
|
 |  |
|
Christian |
Medlem sedan: 2015-08-26
1209 inlägg
|
|
|
Hej hej
Solvern verkar kräva add-in för att kunna testas. Så du får nöja dig med att jag granskar din bifogade kod :).
Engine:=1, EngineDesc:="GRG Nonlinear" Blir redundant då Engine 1 motsvarar GRG nonlinear som lösningsmetod. Välj en av dessa, ta bort den andra.
EngineDesc:="GRG Nonlin1ear" Stavfel, andra elseif satsen.
SetCell:="$E$33"
Nu skickar du endast en sträng till setcell. Du behöver skriva Range("E33"), det finns fler förekomster av detta. Ändra samtliga dina cellreferenser till Range("cell"), så att du skickar objektet av cellen, och inte bara cellens adress som sträng.
Engine _, Underscore brukar användas för att bryta rad. Detta fungerar dock endast i kombination med ett & tecken. Ta bort _.
Sist men kanske inte minst, är att din jämförelse: If Cells(4, 7) = "X1" Then, är känslig för stora och små bokstäver. Du kan skriva:
If ucase(Cells(4, 7)) = "X1" Then
Så tvingar den text i cell(4,7) till stora bokstäver innan jämförelse.
Kör gärna kompilatorn under fliken felsök i din editor, så får du hjälp att hitta fel..
Och sedan en ytterligare notering utanför din kod. Microsoft har just uppdaterat office 365, hur detta slår på excel och vba är inte helt tydligt än, men helt buggfritt är det inte :).
Mvh Christian
|
|
|
|
 |  |
|
BWEINL |
Medlem sedan: 2020-01-31
2 inlägg
|
|
|
Tack för din Feedback Christan. Jag får dock fortfarande följande fel:
- "Fel i modellen. Kontrollera att alla celler och begränsningar är giltiga" - "Några celler som inte är variabla celler är kanske markerade som Heltal, Binär eller AllaOlika"
|
|
|
|
 |  |
|
Christian |
Medlem sedan: 2015-08-26
1209 inlägg
|
|
|
Googlade en del. Verkar som fler har haft samma fel. Dessvärre så är felmeddelandet inte beskrivande för vad som gått fel. Olika fel har varit:versionsproblem fel input, korrupta filer, sammanslagna celler m.m. /c
|
|
|
|
|  |
 | |  |
 | |  |
 | |  |
|
|
|
|
|
 |
 |
 |
|
|