Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Excel Solver Dialoge unterdrücken

Excel Solver Dialoge unterdrücken
08.01.2009 01:12:00
A.
Liebes Forum,
ich habe mir ein Solver-Makro geschrieben, welches eine ganze Weile ohne User-Interaktion laufen soll. Leider kann ich die Nachrichten, die der Solver abgibt, sobald entweder die Iterations- oder die Zeitgrenze erreicht wurde, nicht abschalten. Folglich bleibt das Programm dann immer stehen ... grrrrmblfix ... und ich muss manuell auf "Weiter" bzw. auf "Stopp" klicken.
FRAGE: Womit kann ich ALLE Dialoge, die vom Solver ausgehen unterdrücken?
Unten eingefügt habe ich die Sub, in welcher ich den Solver aufrufe ... ganz alleine so, wird dieser Codeteil jedoch nicht laufen. Ich hoffe, dass jemand dennoch erkennt, woran es bei diesem Code hapert?! Ich hatte bereits gelesen, dass man "solverFinish KeepFinal:=True" setzen soll. Das ist auch ganz nett, habe ich auch gemacht (s.u.) hilft jedoch nicht, wenn die Iterations- oder die Zeitgrenze erreicht wird; denn dann spuckt Excel dennoch eine Mitteilung aus. Hilfe!!
Über Rückmeldungen freue ich mich,
Andy

Sub executeSOLVER(aSP As Variant, aSO As Variant, aSF As Variant, aSS As Variant, aSA As  _
Variant)
' This routine calls the Excel-Add-In-SOLVER
Dim i As Integer: Dim x As Variant
SolverReset    ' Clear any previous Solver settings.
SolverOptions MaxTime:=CInt(aSP(0)), Iterations:=CInt(aSP(1)), Precision:=aSP(2),  _
AssumeLinear:= _
aSP(3), StepThru:=aSP(4), Estimates:=aSP(5), Derivatives:=aSP(6), SearchOption:=aSP(7),  _
_
IntTolerance:=aSP(8), Scaling:=aSP(9), Convergence:=aSP(10), AssumeNonNeg:=aSP(11)
For i = 0 To (UBound(aSA, 1) - LBound(aSA, 1))
SolverAdd CellRef:=aSA(i)(0), Relation:=CInt(aSA(i)(1)), FormulaText:=aSA(i)(2)
Next i
solverOK SetCell:=aSO(0), MaxMinVal:=aSO(1), ValueOf:=aSO(2), ByChange:=aSO(3)
solverFinish KeepFinal:=True 'PROBLEM: GIBT MESSAGE BEI ITERATIONSGRENZE AUS
x = SolverSolve(UserFinish:=True) 'PROBLEM: GIBT MESSAGE BEI ITERATIONSGRENZE AUS
End Sub


Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel Solver Dialoge unterdrücken
09.01.2009 10:35:13
A.
oje, ist die Frage zu schwer?
AW: Excel Solver Dialoge unterdrücken
09.01.2009 16:14:04
Lothar
Hi,
schon mal Application.DisplayAlerts = False probiert?
mfg Lothar
AW: Excel Solver Dialoge unterdrücken
10.01.2009 11:22:00
A.
"Application.DisplayAlerts = False" funktioniert in diesem Fall leider nicht ...
der Solver fragt nämlich explizit nach User-Eingabe. Daher glaube ich, dass es einen Solver-Parameter geben muss, der genau dieses unterdrückt, bzw die Frage schon im Vornherein (Integrationslimit erreicht. Weitermachen?) beantwortet.
Anzeige
AW: Excel Solver Dialoge unterdrücken
10.01.2009 14:10:54
Original
Hi,
ändere mal die Zeile in:
SolverSolve Userfinish:=True
mfg Kurt
AW: Excel Solver Dialoge unterdrücken
10.01.2009 22:15:00
A.
Hallo Kurt,
danke für die Antwort, aber das habe ich doch schon :(
In meinem urspr. Post
" x = SolverSolve(UserFinish:=True) 'PROBLEM: GIBT MESSAGE BEI ITERATIONSGRENZE AUS"
Andy
AW: Excel Solver Dialoge unterdrücken
14.01.2009 22:55:32
Heinz
Hallo,
SolverSolve Userfinish:=True
ist nicht das selbe wie
x = SolverSolve(UserFinish:=True)
Du hast es gar nicht getestet, oder? Klappt problemlos.
Gruß Heinz
Anzeige
AW: Excel Solver Dialoge unterdrücken
14.01.2009 23:25:00
A..Hennig
Hallo Heinz,
Du hast Recht, ich habe den Vorschlag von Kurt in der Tat nicht getestet, da ich davon ausgegangen war, dass zwischen den Zeilen "x = SolverSolve(UserFinish:=True)" und "SolverSolve Userfinish:=True" kein Unterschied bestünde.
Aber nach Deinem Einwand jetzt werde ich es testen ... und es sieht schon sehr vielversprechend aus ... jedenfalls läuft das Makro jetzt seit 10min ohne Unterbrechung. Ich melde mich morgen noch mal, sollte dies wirklich die Lösung sein, das wäre fantastisch!
Bis morgen,
Andy
Anzeige
AW: Excel Solver Dialoge unterdrücken
15.01.2009 09:14:00
A.
Mist, die gleiche Fehlermeldung kommt doch wieder, genau wie immer:
"Die Iterationsgrenze wurde erreicht. Trotzdem fortsetzen? Weiter, Stop,Hilfe"
und dass, obwohl ich jetzt mal "SolverSolve Userfinish:=True" auspropiert hatte.
Mein Ziel ist es nach wie vor, vorher einstellen zu können, was der Algorithmus bei Erreichen genau dieser Grenze tut ... und zwar ohne weiteren User-Input. Aber leider fragt er mich noch immer. grrrr :(
Anzeige
AW: Excel Solver Dialoge unterdrücken
17.01.2009 17:12:58
A.
hmmm,
das Problem existiert noch immer, ich habe jetzt ne Art "würg"-around, bei dem ich die Iterations- und Zeitgrenze derart hochgesetzt habe, dass die Rückmeldungen des Programms nur noch sehr selten auftreten.
Sollte jemand wissen, wie man diese dennoch abstellen kann, so wäre ich sehr dankbar.
Andy
P.S.
Unerwünschte Rückfrage 1: "Die Iterationsgrenze wurde erreicht. Trotzdem fortsetzen? Weiter, Stop,Hilfe"
Unerwünschte Rückfrage 2: "Das Zeitlimit wurde erreicht. Trotzdem fortsetzen? Weiter, Stop,Hilfe"
Anzeige
AW: Excel Solver Dialoge unterdrücken
25.01.2009 03:48:00
A.
Hier ein cross-link zu einem anderen Forum, wo ich die gleiche Frage gestellt habe:
http://www.office-loesung.de/ftopic288177_0_0_asc.php
Fazit aus dem obigen Link: Es scheint so als ob man -bis auf "SolverSolve UserFinish:=False" und "SolverOptions StepThru:=False"- keine Dialoge unterdrücken kann, wenn man nicht die Datei "solver.xla" verändern möchte oder mit der WinAPI herumspielen will.
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Excel Solver Dialoge unterdrücken


Schritt-für-Schritt-Anleitung

Um die Dialoge des Excel Solvers zu unterdrücken, kannst du folgende Schritte in deinem VBA-Code befolgen:

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (deine Arbeitsmappe)" und wähle Einfügen > Modul.

  3. Kopiere und füge folgendes Makro ein:

    Sub executeSOLVER(aSP As Variant, aSO As Variant, aSF As Variant, aSS As Variant, aSA As Variant)
       ' Setze die Solver-Parameter
       SolverReset
       SolverOptions MaxTime:=CInt(aSP(0)), Iterations:=CInt(aSP(1)), Precision:=aSP(2), _
                     AssumeLinear:=aSP(3), StepThru:=False, Estimates:=aSP(5), _
                     Derivatives:=aSP(6), SearchOption:=aSP(7), IntTolerance:=aSP(8), _
                     Scaling:=aSP(9), Convergence:=aSP(10), AssumeNonNeg:=aSP(11)
       ' Füge Einschränkungen hinzu
       For i = 0 To (UBound(aSA, 1) - LBound(aSA, 1))
           SolverAdd CellRef:=aSA(i)(0), Relation:=CInt(aSA(i)(1)), FormulaText:=aSA(i)(2)
       Next i
       ' Setze die Zielzelle
       solverOK SetCell:=aSO(0), MaxMinVal:=aSO(1), ValueOf:=aSO(2), ByChange:=aSO(3)
       ' Führe den Solver aus und unterdrücke Dialoge
       SolverSolve UserFinish:=True
    End Sub
  4. Ausführen des Makros: Verwende das Makro in deinem Excel-Dokument, um den Solver ohne Dialoge auszuführen.


Häufige Fehler und Lösungen

  • Fehler: "Die Iterationsgrenze wurde erreicht. Trotzdem fortsetzen?"

    • Lösung: Stelle sicher, dass UserFinish:=True beim Aufruf von SolverSolve verwendet wird. Dies könnte die Dialoge unterdrücken.
  • Wenn der Solver weiterhin Fragen stellt:

    • Überprüfe, ob StepThru in SolverOptions auf False gesetzt ist. Diese Einstellung kann helfen, unerwünschte Benutzerabfragen zu vermeiden.

Alternative Methoden

Falls die oben genannten Methoden nicht funktionieren, kannst du auch versuchen:

  • Solver-Parameter ändern: Erhöhe die Iterations- und Zeitgrenzen, um die Wahrscheinlichkeit, dass der Solver eine Rückfrage stellt, zu verringern.

  • WinAPI verwenden: Eine komplexere Methode wäre, die Windows API zu verwenden, um Dialoge zu unterdrücken, jedoch ist dies fortgeschritten und erfordert tiefere Programmierkenntnisse.


Praktische Beispiele

Hier ist ein einfaches Beispiel, das zeigt, wie du den Excel Solver ohne Benutzerinteraktion verwenden kannst:

Sub BeispielSolver()
    Dim Werte As Variant
    Dim Ziel As Variant
    ' Definiere deine Werte und Zielzelle
    Werte = Array(10, 100, 0.01) ' Beispielwerte
    Ziel = Array("B1", 1, 0, "A1") ' Beispielziel
    ' Führe den Solver aus
    executeSOLVER(Werte, Ziel, , , )
End Sub

In diesem Beispiel wird der Excel Solver ohne Dialoge für die festgelegten Werte ausgeführt.


Tipps für Profis

  • Verwende SolverFinish: Setze KeepFinal:=True, um das Endergebnis zu behalten, ohne dass der Benutzer eingreifen muss.

  • Debugging: Wenn der Solver nicht wie erwartet funktioniert, kannst du die Debugging-Werkzeuge in VBA verwenden, um den Code Schritt für Schritt durchzugehen.

  • Optimierung: Experimentiere mit den Solver-Optionen, um die Leistung zu verbessern und unerwünschte Dialoge zu minimieren.


FAQ: Häufige Fragen

1. Frage Wie kann ich den Excel Solver deaktivieren?

Antwort Um den Excel Solver zu deaktivieren, kannst du einfach die Solver-Add-In-Funktion in den Excel-Optionen ausschalten oder den Solver nicht in deinem VBA-Code verwenden.

2. Frage Warum funktioniert der Excel Solver nicht richtig?

Antwort Der Solver funktioniert möglicherweise nicht, wenn die Eingabewerte oder -parameter nicht korrekt definiert sind. Stelle sicher, dass alle erforderlichen Zellen und Einschränkungen richtig angegeben sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige