Freigeben über

Zurücksetzen vom SOLVER nach "Fehler im Modell"

Anonym
2015-07-23T09:37:51+00:00

Hallo Community,

ich komme mit der Bitte, sich eines Problemes mit dem SOLVER anzunehmen, das ich schon länger habe. Bei Aufruf des Solver aus dem Ribbon "Daten" muss ich jetzt zwingend den Solver zurücksetzen, sonst kommt folgende Fehlermeldung:

Das hat sicher nichts mit einem Fehler in meinem Modell zu tun! Denn nach dem Zurücksetzen wird klaglos gesolved! Aber es ist extrem lästig, da die Solverparameter dabei aus der Eingabemaske gelöscht werden und man/ich danach die Aufgabestellung ständig neu eingeben muss. Dies betrifft jeden weiteren Aufruf des Solvers. Früher / normal ging der nächste Solveraufruf mit der befüllten Maske fehlerfrei.

Das Problem trat zum erstenmal auf, nachdem ich eine VBA-Routine mit SOLVER-Zugriff (schrittweise) entwickelt hatte. Diese läuft seitdem problemlos, ich gebe den Qullecode der Vollständigkeit halber unten an. Hier gibt es das reset-Problem nicht, bzw. wird in der Routine solverreset und Parameterbefüllung geregelt.

Vielleicht hat jemand eine Idee. Eine Neuinstallation von Excel7 hab ich noch nicht probiert, und, wichtig: das Problem habe ich mit .xlsm-Dateien auf meinen zweiten PC vererbt.

Noch eine ev. relevante Information: auf diesem 2ten PC erscheint im Ribbon Daten der Solvereintrag doppelt (beide funktionieren), und ich habe bislang noch nicht gefunden, wie ich diese Doppelung beseitigen kann (Neuinstallation ausgenommen).

Grüße,

HeFiLa

Sub Solve4mal()

'||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Dim i As Integer, j As Integer, res As Range, par As Range, par1 As Range, par_B As Range

Dim TabNamen() As Variant, ws As Worksheet, par_Laref As Range, par_AB As Range

Dim cz As String, cp As String, par_A As Range, Larefconst As Double

Dim State

Application.ScreenUpdating = True

Debug.Print "SOLVE..."

Larefconst = 62 'typischer Laref-Wert

For i = 1 To 2

For j = 1 To 2

Set res = Range("CY25").Offset((j - 1) * 28, (i - 1) * 25)

Set par = ActiveSheet.Range("CX27:CZ27").Offset((j - 1) * 28, (i - 1) * 25)

Set par_Laref = par.Range("A1")

Set par_B = par.Range("B1")

Set par_A = par.Range("C1")

par_Laref.Value = Larefconst 'Vorbesetzen mit typischem Wert

par_B.Value = par_B.Offset(2, -4).Value 'Vorbesetzen

par_A.Value = par_B.Offset(2, -3).Value 'Vorbesetzen

cz = res.Address

cp = par.Address

SolverReset

Worksheets("COLa").Activate

SolverOptions stepthru:=False

SolverOk SetCell:=cz, MaxMinVal:=2, ValueOf:="0", ByChange:=cp

SolverSolve UserFinish:=True

SolverFinish KeepFinal:=1

State = SolverGet(TypeNum:=1)

If IsError(State) Then Debug.Print i, j, "not solved!"

'    MsgBox "You have not used Solver on the active sheet"

Debug.Print i & " " & j & ", fit= "; Range(cz).Value

Next j

Next i

SolverReset

Set res = Nothing

Set par = Nothing

Set par_Laref = Nothing

Set par_B = Nothing

Set par_A = Nothing

Debug.Print "Solver reset"

End Sub

Microsoft 365 und Office | Excel | Für Zuhause | Windows

Gesperrte Frage. Diese Frage wurde aus der Microsoft-Support-Community migriert. Sie können darüber abstimmen, ob sie hilfreich ist, aber Sie können keine Kommentare oder Antworten hinzufügen oder der Frage folgen.

0 Kommentare Keine Kommentare
Antwort, die vom Frageautor angenommen wurde
  1. Anonym
    2015-07-23T11:16:58+00:00

    Hallo Community,

    nun antworte ich auf mein eigenes Problem!: Ich hebe gerade herausgef unden, dass das Problem vom Zahlenformat verursacht wird!!

    Wenn ich bei Excel-Optionen "Trennzeichen lt Betriebssystem" wähle (damit erscheint "," als Dezimaltrennzeichen), funktioniert alles Bestens:  Durch Inspektion der SoverOptionen zeigt sich, wie die Parameter default nach 'Zurücksetzen' besetzt werden (linkes Bild).

    Ich verwende aber seit einiger Zeit "." als Dezimaltrennzeichen. Damit gehen die regulären Einträge verloren. Sieht man in die Optionen rein, so findet man irreguläre Werte (rechtes Bild), die durch Handeintrag nicht mehr hergestellt werden können, da weder Punkt noch Komma als Trennzeichen akzeptiert werden (->Formatfehler in den Feldern Genauigkeit und Konvergenz).

    Es sieht also so aus, das bei Arbeit mit einem Dezimalpunkt die Solveroptionen falsche Werte annehmen und Solver einen Fehler im Modell sieht, der nun bei jedem Aufruf durch Zurücksetzen beseitigt werden muss.

    Kann ich denn ev. das Trennzeichen statt in den ExcelOptionen im Betriebssystem definieren (als Dezimalpunkt)?

    Ich bitte um Beratung!

    Gruß

    HeFiLa

    ich komme mit der Bitte, sich eines Problemes mit dem SOLVER anzunehmen, das ich schon länger habe. Bei Aufruf des Solver aus dem Ribbon "Daten" muss ich jetzt zwingend den Solver zurücksetzen, sonst kommt folgende Fehlermeldung:

    Das hat sicher nichts mit einem Fehler in meinem Modell zu tun! Denn nach dem Zurücksetzen wird klaglos gesolved! Aber es ist extrem lästig, da die Solverparameter dabei aus der Eingabemaske gelöscht werden und man/ich danach die Aufgabestellung ständig neu eingeben muss. Dies betrifft jeden weiteren Aufruf des Solvers. Früher / normal ging der nächste Solveraufruf mit der befüllten Maske fehlerfrei.

    Das Problem trat zum erstenmal auf, nachdem ich eine VBA-Routine mit SOLVER-Zugriff (schrittweise) entwickelt hatte. Diese läuft seitdem problemlos, ich gebe den Qullecode der Vollständigkeit halber unten an. Hier gibt es das reset-Problem nicht, bzw. wird in der Routine solverreset und Parameterbefüllung geregelt.

    Vielleicht hat jemand eine Idee. Eine Neuinstallation von Excel7 hab ich noch nicht probiert, und, wichtig: das Problem habe ich mit .xlsm-Dateien auf meinen zweiten PC vererbt.

    Noch eine ev. relevante Information: auf diesem 2ten PC erscheint im Ribbon Daten der Solvereintrag doppelt (beide funktionieren), und ich habe bislang noch nicht gefunden, wie ich diese Doppelung beseitigen kann (Neuinstallation ausgenommen).

    Grüße,

    HeFiLa

    Sub Solve4mal()

    '||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

    Dim i As Integer, j As Integer, res As Range, par As Range, par1 As Range, par_B As Range

    Dim TabNamen() As Variant, ws As Worksheet, par_Laref As Range, par_AB As Range

    Dim cz As String, cp As String, par_A As Range, Larefconst As Double

    Dim State

    Application.ScreenUpdating = True

    Debug.Print "SOLVE..."

    Larefconst = 62 'typischer Laref-Wert

    For i = 1 To 2

    For j = 1 To 2

    Set res = Range("CY25").Offset((j - 1) * 28, (i - 1) * 25)

    Set par = ActiveSheet.Range("CX27:CZ27").Offset((j - 1) * 28, (i - 1) * 25)

    Set par_Laref = par.Range("A1")

    Set par_B = par.Range("B1")

    Set par_A = par.Range("C1")

    par_Laref.Value = Larefconst 'Vorbesetzen mit typischem Wert

    par_B.Value = par_B.Offset(2, -4).Value 'Vorbesetzen

    par_A.Value = par_B.Offset(2, -3).Value 'Vorbesetzen

    cz = res.Address

    cp = par.Address

    SolverReset

    Worksheets("COLa").Activate

    SolverOptions stepthru:=False

    SolverOk SetCell:=cz, MaxMinVal:=2, ValueOf:="0", ByChange:=cp

    SolverSolve UserFinish:=True

    SolverFinish KeepFinal:=1

    State = SolverGet(TypeNum:=1)

    If IsError(State) Then Debug.Print i, j, "not solved!"

    '    MsgBox "You have not used Solver on the active sheet"

    Debug.Print i & " " & j & ", fit= "; Range(cz).Value

    Next j

    Next i

    SolverReset

    Set res = Nothing

    Set par = Nothing

    Set par_Laref = Nothing

    Set par_B = Nothing

    Set par_A = Nothing

    Debug.Print "Solver reset"

    End Sub

    Hallo Community,

    Eine Person fand diese Antwort hilfreich.
    0 Kommentare Keine Kommentare
Antwort, die vom Frageautor angenommen wurde
  1. Andreas Killer 144.1K Zuverlässigkeitspunkte Freiwilliger Moderator
    2015-07-24T06:16:25+00:00

    Es sieht also so aus, das bei Arbeit mit einem Dezimalpunkt die Solveroptionen falsche Werte annehmen und Solver einen Fehler im Modell sieht, der nun bei jedem Aufruf durch Zurücksetzen beseitigt werden muss.

    Das hast Du sehr schön analysiert und das Problem liegt nicht bei Dir, nicht an Deinen Einstellungen, nicht im eigentlichen Solver, sondern in der Schnittstelle, sprich im Solver.xlam

    Ich hab da auch schon mal in den Innereien gegraben:

    https://social.msdn.microsoft.com/Forums/en-US/2d9ff4b0-e1ef-435a-bfbc-dc1103ea7e3f/solver-vba-solveradd-constraints-with-decimals-not-possible?forum=exceldev

    Es ist beim Hersteller bekannt das es hier Fehler gibt, behoben werden diese jedoch nicht.

    Solange nicht genug Leute schreien und man immer noch einen Workaround findet... wir sind halt zu deutsch. :-)

    Andreas.

    0 Kommentare Keine Kommentare

2 zusätzliche Antworten

Sortieren nach: Am hilfreichsten
  1. Anonym
    2015-07-24T07:22:15+00:00

    Es sieht also so aus, das bei Arbeit mit einem Dezimalpunkt die Solveroptionen falsche Werte annehmen und Solver einen Fehler im Modell sieht, der nun bei jedem Aufruf durch Zurücksetzen beseitigt werden muss.

    Das hast Du sehr schön analysiert und das Problem liegt nicht bei Dir, nicht an Deinen Einstellungen, nicht im eigentlichen Solver, sondern in der Schnittstelle, sprich im Solver.xlam

    Ich hab da auch schon mal in den Innereien gegraben:

    https://social.msdn.microsoft.com/Forums/en-US/2d9ff4b0-e1ef-435a-bfbc-dc1103ea7e3f/solver-vba-solveradd-constraints-with-decimals-not-possible?forum=exceldev

    Es ist beim Hersteller bekannt das es hier Fehler gibt, behoben werden diese jedoch nicht.

    Solange nicht genug Leute schreien und man immer noch einen Workaround findet... wir sind halt zu deutsch. :-)

    Andreas.

    Hallo Andreas,

    danke für Dein feedback! Den Workaround (Dezimalpunkt einstellen unter Sytemsteuerung/RegionUndSprache/Datum,.../Formate/weitere Einstellungen: Dezimaltrennzeichen, also "deutscher Zeichensatz mit englischem Dezimalpunkt", was gelegentlich verlangt wird, habe ich in meiner 'Eigenantwort' beschrieben.

    Wie gesagt, vielleicht nützt das jemandem...

    NB: der link verweigert sich:

    Schöne Grüße

    HeFiLa

    0 Kommentare Keine Kommentare
  2. Anonym
    2015-07-23T18:55:23+00:00

    Liebe Community,

    habe mein Problem gelöst: nämlich den Dezimalpunkt im Betriebssystem einstellen (s. Bild) und bei ExcelOptionen das Häkchen bei Dezimalzeichen vom Betriebssystem holen. Dann kommt der Solver ohne reset klar.

    Sorry für den Zirkus (aber vielleicht nutzt es auch jemandem beim intensiven solven)?!   :-)

    Grüße, danke

    HeFiLa

    Hallo Community,

    nun antworte ich auf mein eigenes Problem!: Ich hebe gerade herausgef unden, dass das Problem vom Zahlenformat verursacht wird!!

    Wenn ich bei Excel-Optionen "Trennzeichen lt Betriebssystem" wähle (damit erscheint "," als Dezimaltrennzeichen), funktioniert alles Bestens:  Durch Inspektion der SoverOptionen zeigt sich, wie die Parameter default nach 'Zurücksetzen' besetzt werden (linkes Bild).

    Ich verwende aber seit einiger Zeit "." als Dezimaltrennzeichen. Damit gehen die regulären Einträge verloren. Sieht man in die Optionen rein, so findet man irreguläre Werte (rechtes Bild), die durch Handeintrag nicht mehr hergestellt werden können, da weder Punkt noch Komma als Trennzeichen akzeptiert werden (->Formatfehler in den Feldern Genauigkeit und Konvergenz).

    Es sieht also so aus, das bei Arbeit mit einem Dezimalpunkt die Solveroptionen falsche Werte annehmen und Solver einen Fehler im Modell sieht, der nun bei jedem Aufruf durch Zurücksetzen beseitigt werden muss.

    Kann ich denn ev. das Trennzeichen statt in den ExcelOptionen im Betriebssystem definieren (als Dezimalpunkt)?

    Ich bitte um Beratung!

    Gruß

    HeFiLa

    ich komme mit der Bitte, sich eines Problemes mit dem SOLVER anzunehmen, das ich schon länger habe. Bei Aufruf des Solver aus dem Ribbon "Daten" muss ich jetzt zwingend den Solver zurücksetzen, sonst kommt folgende Fehlermeldung:

    Das hat sicher nichts mit einem Fehler in meinem Modell zu tun! Denn nach dem Zurücksetzen wird klaglos gesolved! Aber es ist extrem lästig, da die Solverparameter dabei aus der Eingabemaske gelöscht werden und man/ich danach die Aufgabestellung ständig neu eingeben muss. Dies betrifft jeden weiteren Aufruf des Solvers. Früher / normal ging der nächste Solveraufruf mit der befüllten Maske fehlerfrei.

    Das Problem trat zum erstenmal auf, nachdem ich eine VBA-Routine mit SOLVER-Zugriff (schrittweise) entwickelt hatte. Diese läuft seitdem problemlos, ich gebe den Qullecode der Vollständigkeit halber unten an. Hier gibt es das reset-Problem nicht, bzw. wird in der Routine solverreset und Parameterbefüllung geregelt.

    Vielleicht hat jemand eine Idee. Eine Neuinstallation von Excel7 hab ich noch nicht probiert, und, wichtig: das Problem habe ich mit .xlsm-Dateien auf meinen zweiten PC vererbt.

    Noch eine ev. relevante Information: auf diesem 2ten PC erscheint im Ribbon Daten der Solvereintrag doppelt (beide funktionieren), und ich habe bislang noch nicht gefunden, wie ich diese Doppelung beseitigen kann (Neuinstallation ausgenommen).

    Grüße,

    HeFiLa

    Sub Solve4mal()

    '||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

    Dim i As Integer, j As Integer, res As Range, par As Range, par1 As Range, par_B As Range

    Dim TabNamen() As Variant, ws As Worksheet, par_Laref As Range, par_AB As Range

    Dim cz As String, cp As String, par_A As Range, Larefconst As Double

    Dim State

    Application.ScreenUpdating = True

    Debug.Print "SOLVE..."

    Larefconst = 62 'typischer Laref-Wert

    For i = 1 To 2

    For j = 1 To 2

    Set res = Range("CY25").Offset((j - 1) * 28, (i - 1) * 25)

    Set par = ActiveSheet.Range("CX27:CZ27").Offset((j - 1) * 28, (i - 1) * 25)

    Set par_Laref = par.Range("A1")

    Set par_B = par.Range("B1")

    Set par_A = par.Range("C1")

    par_Laref.Value = Larefconst 'Vorbesetzen mit typischem Wert

    par_B.Value = par_B.Offset(2, -4).Value 'Vorbesetzen

    par_A.Value = par_B.Offset(2, -3).Value 'Vorbesetzen

    cz = res.Address

    cp = par.Address

    SolverReset

    Worksheets("COLa").Activate

    SolverOptions stepthru:=False

    SolverOk SetCell:=cz, MaxMinVal:=2, ValueOf:="0", ByChange:=cp

    SolverSolve UserFinish:=True

    SolverFinish KeepFinal:=1

    State = SolverGet(TypeNum:=1)

    If IsError(State) Then Debug.Print i, j, "not solved!"

    '    MsgBox "You have not used Solver on the active sheet"

    Debug.Print i & " " & j & ", fit= "; Range(cz).Value

    Next j

    Next i

    SolverReset

    Set res = Nothing

    Set par = Nothing

    Set par_Laref = Nothing

    Set par_B = Nothing

    Set par_A = Nothing

    Debug.Print "Solver reset"

    End Sub

    Hallo Community,

    0 Kommentare Keine Kommentare