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

Forumthread: Solver Add-In mit VBA starten

Solver Add-In mit VBA starten
30.11.2012 10:39:44
Ralf
Hallo Forum,
ich habe ein Problem mit dem Solver Add-In.
Im Büro setzen wir Office 2007 ein, zu Hause habe ich Office 2010.
Ich hatte nun gestern eine Datei mit einer VBA Zielwertsuche. Auf meinem Bürorechner lief Sie problemlos, bei meinem Kollegen nicht. Zu Hause funktionierte die Berechnung ebenfalls nicht. Ich habe dann im Internet folgendes ausfindig gemacht:
'für Excel 2007 gilt dies:
Set Solv = AddIns("Solver Add-In")
If Solv.Installed = False Then
AddIns("Solver Add-in").Installed = True
End If
'für Excel 2010 gilt dies:
AddIns("Solver").Installed = True
Zusätzlich habe ich im VBA Editor einen Verweis für Solver erstellt.
Zu Hause hat die Berechnung dann funktioniert.
Habe ich grundsätzlich etwas falsch gemacht?
Kann man die beiden oben genannten Scripte verbinden, also Versionsabfrage => wenn 2007er Version dann 1. Script => wenn 2010er Version dann 2. Script?
Vielen Dank im Voraus für eine Rückmeldung.
Viele Grüße
Ralf

Anzeige

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Solver Add-In mit VBA starten
30.11.2012 13:00:42
Hajo_Zi
Hallo Ralf,
MsgBox Val(Application.Version)

AW: Solver Add-In mit VBA starten
30.11.2012 13:48:15
Ralf
Hallo Hajo,
wo soll das hin, was passiert dann, ist das dann allgemein gültig, so dass bei nicht gesetztem Haken in den Add-Ins keine Fehlermeldung kommt?
Hm, damit kann ich jetzt nicht wirklich etwas anfangen.
Viele Grüße
Ralf

Anzeige
AW: Solver Add-In mit VBA starten
30.11.2012 15:39:48
Luschi
Hallo Ralf,
den Vorschlag von Hajo kannst Du vergessen. Da Excel-Vba eine Script-Sprache ist, wird vor dem Ausführen des Vba-Code alles erst kompiliert. Deshalb muß beim Öffnen der Arbeitsmappe der entsprechende Vba-Code ausgetauscht/aktiviert werden.
Dazu gibt es bedingte Compiler-Konstanten, die als 1. Zeichen mit dem #-Zeichen beginnen und bedingte Verzweigungen in der Form '#If #Else #End'.
Leider kann man die Compiler-Konstanten nicht mit einer Funktion festlegen, sondern nur durch Literale vorbelegen. So ist es seit Visual Basic 5/6, Vba bis hin zu VB.Net.
Wie das geht, kannst Du in diesem Beispiel von mir sehen:
http://www.ms-office-forum.net/forum/showthread.php?t=292815#13
Hierbei geht es darum, einem entsprechenden Menü-Befehl/Ribbon-Button per Vba zu starten - je nach dem, ob die xls-Datei mit Excel 2003 oder 2007/2010 geöffnet wird.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Solver Add-In mit VBA starten
30.11.2012 16:54:00
Hajo_Zi
Hallo Ralf,
Du hast einen Code erstellt und Wolltest nur die Abfrage der Version, diese wir bei der Msgbox angezeigt. ein If machen dürfte nicht das Problem sein.
Gruß Hajo

AW: Solver Add-In mit VBA starten
30.11.2012 17:35:41
Luschi
Hallo Hajo,
Ralf wollte nicht die eingesetzte Excel-Version wissen, sondern er will den Solver aktivieren, falls nicht das Häckchen in 'Vba-Extras-Verweise' gesetzt ist.
Und hier zeigt sich wieder einmal, das nicht alles 1:1-umsetzbar ist zwischen E_2007 & 2010/2012.
Bis Excel 2007 ist der Solver (von dem ich sehr viel halte und einsetze) ein Add-In und muz deshalb ander aktiviert werden als in E_2010/2012.
Da das im Vba-Code passiert, muß hier die bedingte Compilierung eingreifen (siehe mein Beispiel!)
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Solver Add-In mit VBA starten
03.12.2012 06:40:55
Ralf
Hallo Luschi,
danke für Deine ausführliche Beschreibung, aber ....
ich erstelle VBA-Codes (fast) ausschließlich mit dem Makrorekorder. Daher verstehe ich Deine Antwort nicht annähernd. Deinen Link habe ich mir angesehen und die If Abfrage bezgl. der Versionsabfrage mitgenommen. Aber auch damit kann ich den Solver nicht starten.
Viele Grüße
Ralf

Anzeige
AW: Solver Add-In mit VBA starten
03.12.2012 07:51:40
Luschi
Hallo Ralf,
das ist auch nicht so einfach, da hier beim Öffnen der Arbeitsmappe mindestens eine Zeile Vba-Code durch Vba selbst ausgetauscht werden muß. Das liegt daran, das zwischen den verschiedenen Excel-Versionen der Vba-Code an wenigen - aber meist wichtigen Stellen - nicht zueinander kompatibel ist.
M$ kann es sich wahrscheinlich nicht vorstellen, daß in einer dt. Firma nicht alle PC's gleichzeitig auf die neue Excel-Version umgestellt werden.
Lange Rede - kurzer Sinn: mache eine kleine Demo-Datei, schreibe noch ein paar mehr Info's dazu und ich helfe Dir gern weiter.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Solver Add-In mit VBA starten
03.12.2012 08:51:49
Ralf
Hallo Luschi,
hier findest Du die gewünschte Datei:
https://www.herber.de/bbs/user/82861.xlsm
Ich hoffe, Du kannst damit etwas anfangen.
Vielen Dank im Voraus für eine Rückmeldung.
Viele Grüße
Ralf

AW: Solver Add-In mit VBA starten
03.12.2012 14:06:54
Luschi
Hallo Ralf,
bin am Thema dran, aber mein Boss stört z.Z. unsere vertrauensvolle Zusammenarbeit.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Solver Add-In mit VBA starten
03.12.2012 14:08:06
Ralf
Hallo Luschi,
hm, hm, lustig.
Bin auf Deine Lösung gespannt.
Viele Grüße
Ralf

AW: Solver Add-In mit VBA starten
03.12.2012 14:30:14
Luschi
Hallo Ralf,
hab doch noch 'ne Frage (oder auch 2).
1. Spielt Excel-2003 mit dem Kompatibilitätspackt für Excel 2007 auch eine Rolle in der Firma?
2. Der in Deiner Datei gesetzte Vba-Verweis: //nv01001.?group.net\q232024\SOLVER.XLAM ist doch sicher der Verweis auf den Excel2007-Solver?
Muß erst noch raus kriegen, ob diese Datei mit der selben von Excel2010 kompatibel ist oder ob hier ein anderes Verzeichnis erforderlich ist.
Leider wird beim Thema 'Excel-Solver' in den dt./amerk.-NewsGroups viel um den heißen Brei herumgeredet und die Hilfe-Beispiele im MSDN sind genauso bescheiden wie in der Excel-Hilfe (Abklatsch 1:1).
Hier verspielt M$ viel Kredit bei mir.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Solver Add-In mit VBA starten
03.12.2012 14:36:16
Ralf
Hallo Luschi,
zu 1.) nein, Excel 2003 spielt keine Rolle.
zu 2.) ich habe die Datei solver.xlam einmal unter Deinem angegebenen Pfad, und ein weiteres mal unter diesem Pfad: C:\Program Files\Microsoft Office\Office12\Library\SOLVER
Und genau richtig erkannt, das ganze sollte kompatibel zu Excel 2010 sein.
Wo die Datei unter Excel 2010 liegt, kann ich heute Abend zu Hause nachsehen.
Viele Grüße
Ralf

Anzeige
AW: Solver Add-In mit VBA starten
04.12.2012 09:59:11
Luschi
Hallo Ralf,
habe das Teil jetzt soweit fertig, daß die korrekte Solver-xlam-Datei für E2007 & E2010
gesetzt wird - auch wenn zuvor die Datei von der anderen Excel-Version gestartet wurde.
Habe ein paar Meldungsboxen in der Form 'CreateObject("WScript.Shell").Popup' reingesetzt,
die sich nach 1 Sekunde von selbst schließen!
https://www.herber.de/bbs/user/82877.xlsm
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Solver Add-In mit VBA starten
04.12.2012 10:15:57
Ralf
Hallo Luschi,
vielen Dank für Deine kompetente Hilfe.
Ich werde es nachher an dem Rechner meines Kollegen ausprobieren.
Folgende Fragen habe ich aber noch:
- Beim Öffnen der Mappe bekomme ich die MsgBox "Ressource schon gesetzt". Dies muss ich mit OK bestätigen. Kann man das übergehen bzw. im Hintergrund laufen lassen?
- Muss der Verweis auf Solver.xlam weiterhin in der Mappe gesetzt bleiben?
- Um Deine Arbeit in eine weitere Arbeitsmappe zu übertragen: Reicht es aus das Modul "mod_Luschi" in die neue Mappe einzufügen?
Kannst Du mir bei Zeiten darauf noch eine Rückmeldung geben?
Vielen Dank im Voraus?
Viele Grüße
Ralf

Anzeige
AW: Solver Add-In mit VBA starten
04.12.2012 10:44:00
Luschi
Hallo Ralf,
sicher meinst Du diese Vba-Zeile:
CreateObject("WScript.Shell").Popup "Reference schon gesetzt", 2, "Solver"
Hier soll eigentlich das stehen:
CreateObject("WScript.Shell").Popup "Reference schon gesetzt", 1, "Solver"
Dieses VB(6)-Script-Objekt schließt sich automatisch nach 1 Sekunde (oder kann auch etwas länger dauern), jenach dem, wieviele andere Ressorcen noch den Windows-Timer gerade benutzen.
Du kannst sie natürlich durch ein Kommentarzeichen deaktivieren.
Ich brauchte sie, um den Ablaufweg zu verfolgen, da beim De-/Aktivieren des Solvers die der Schritt-Debugger nicht so richtig mitspielt!
Wenn die Datei gerade mit E2010 bearbeitet wird, muß beim Schließen der Solver nicht deaktiviert werden, wenn man weiß, daß beim nächsten Mal die Datei mit E2007 beackert wird (oder auch umgekehrt!)
Ich habe das x-mal hin und her getestet.
Du mußt das komplette Modul 'mod_Luschi' in die Original-Test-Datei! übernehmen und zusätzlich die Befehle aus:
DieseArbeitsmappe-Workbook-Open()
Das Modul am Besten im Vba-Explorer Exportieren und in der anderen Datei wieder Importieren,
dann passieren die wenigsten Fehler.
Das (Klassen)-Modul 'DieseArbeitsmappe' kann man auf diese Weise nicht übernehmen, da Excel dann daraus ein 'richtiges' Klassenmodul macht, das nicht mehr unter 'Microsoft Office Objekte' sondern in einer neuen Gruppe 'Klassenmodule' zu finden ist.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Solver Add-In mit VBA starten
04.12.2012 11:10:42
Ralf
Hallo Luschi,
alles klar. Ich werde es testen. Heute Abend dann auch zu Hause unter Excel 2010. Bei Bedarf melde ich mich wieder.
Ist das Script zukunftsfähig und auch unter Excel 2013 lauffähig?
Vielen Dank nochmals für Deine Hilfe. Verdammt gute Arbeit!
Viele Grüße
Ralf
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Solver Add-In mit VBA aktivieren und nutzen


Schritt-für-Schritt-Anleitung

  1. Solver Add-In aktivieren:

    • Überprüfe, ob das Solver Add-In in Excel aktiviert ist. Gehe dazu zu Datei > Optionen > Add-Ins.
    • Wähle im Dropdown-Menü „Excel-Add-Ins“ und klicke auf „Gehe zu…“. Setze ein Häkchen bei „Solver Add-In“ und klicke auf „OK“.
  2. VBA-Code zum Aktivieren des Solvers:

    • Öffne den VBA-Editor (Alt + F11) und füge den folgenden Code ein, um den Solver automatisch zu aktivieren, je nach Excel-Version:
    Sub ActivateSolver()
       Dim Solv As AddIn
       If Val(Application.Version) < 14 Then ' Für Excel 2007
           Set Solv = AddIns("Solver Add-In")
           If Not Solv.Installed Then
               Solv.Installed = True
           End If
       Else ' Für Excel 2010 und höher
           Set Solv = AddIns("Solver")
           If Not Solv.Installed Then
               Solv.Installed = True
           End If
       End If
    End Sub
  3. Verweis auf den Solver setzen:

    • Stelle sicher, dass du im VBA-Editor unter Extras > Verweise den Verweis auf „Solver“ gesetzt hast. Dies ist wichtig, damit du den Solver in VBA nutzen kannst.

Häufige Fehler und Lösungen

  • Fehler: "Solver kann nicht gefunden werden":

    • Stelle sicher, dass der Solver installiert und aktiviert ist. Überprüfe die Add-Ins wie oben beschrieben.
  • Fehler: "Ressource schon gesetzt":

    • Dieser Hinweis kann ignoriert werden, indem du die Zeile im Code änderst, die die Meldung auslöst, oder die Meldung ganz entfernst.
  • Fehler: Versionskonflikte:

    • Wenn du den VBA-Code auf verschiedenen Excel-Versionen verwendest, achte darauf, dass der passende Codeabschnitt für die Version, die du verwendest, ausgeführt wird.

Alternative Methoden

  • Manuelle Aktivierung des Solvers:

    • Du kannst den Solver auch manuell aktivieren, indem du den Pfad zu solver.xlam direkt aufrufst. Dies kann hilfreich sein, wenn du sicherstellen möchtest, dass die richtige Version geladen wird:
    Workbooks.Open "C:\Pfad\zu\deinem\Solver.xlam"
  • Fehlerbehandlung in VBA:

    • Verwende Fehlerbehandlungsroutinen, um besser mit Problemen umzugehen, die beim Laden des Solvers auftreten können:
    On Error Resume Next
    ' Dein Code hier
    On Error GoTo 0

Praktische Beispiele

  • Solver für eine Zielwertsuche verwenden:

    • Hier ist ein kurzes Beispiel, wie du den Solver in einem VBA-Skript verwenden kannst:
    Sub SolverExample()
       SolverOk SetCell:="$B$2", _
                 ValueOf:=0, _
                 ByChange:="$A$1"
       SolverAdd CellRef:="$A$1", _
                 Relation:=3, _
                 FormulaText:="10"
       SolverSolve UserFinish:=True
    End Sub
  • Automatische Ausführung des Solvers:

    • Du kannst den Solver automatisch ausführen, wenn die Datei geöffnet wird:
    Private Sub Workbook_Open()
       ActivateSolver
       SolverExample
    End Sub

Tipps für Profis

  • Verwende benannte Bereiche:

    • Verwende benannte Bereiche in Excel, um deinen Solver-Code lesbarer zu machen.
  • Optimierung des Codes:

    • Halte deinen Code sauber und dokumentiere die einzelnen Schritte, um die Wartbarkeit zu verbessern.
  • Testen in verschiedenen Versionen:

    • Teste deinen Excel VBA Solver Code in verschiedenen Excel-Versionen, um sicherzustellen, dass er überall funktioniert.

FAQ: Häufige Fragen

1. Wie kann ich den Solver in Excel 2013 aktivieren? Du kannst die gleichen Schritte wie für Excel 2010 verwenden, da die Aktivierung des Solver Add-Ins identisch bleibt.

2. Was ist der Unterschied zwischen Solver und Zielwertsuche? Der Solver ist ein leistungsfähiges Tool, das nicht nur die Zielwertsuche ermöglicht, sondern auch komplexere Optimierungsprobleme lösen kann.

3. Kann ich den Solver auch in Excel Online verwenden? Der Solver ist in Excel Online nicht verfügbar. Du musst die Desktop-Version verwenden, um VBA und den Solver zu nutzen.

4. Wie kann ich den Solver mit einer Schaltfläche verbinden? Du kannst eine Schaltfläche in Excel einfügen und das Makro, das den Solver ausführt, damit verknüpfen. Gehe zu Entwicklertools > Einfügen > Schaltfläche (Formularsteuerelement) und weise das Makro zu.

5. Was kann ich tun, wenn der Solver nicht funktioniert? Überprüfe die Add-In-Aktivierung, die Pfade zu den Solver-Dateien und die VBA-Verweise. Achte auch auf mögliche Konflikte zwischen verschiedenen Excel-Versionen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige