Anzeige
Archiv - Navigation
1144to1148
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

workbook_calculate und solver

workbook_calculate und solver
Josef
Hallo VBA Profis
ich möchte gerne in einem Arbeitsblatt durch eine Änderung einer Zelle den Solver starten.
Normalerweise geht das mit "Worksheet_Change(ByVal Target As Excel.Range)"
Hier der dazugehörige Code wie es bei einer manuellen Zelländerung funktioniert:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("H10:H11")) Is Nothing Then
Application.ScreenUpdating = False
SolverReset
SolverOk SetCell:="$N$81", _
MaxMinVal:=2, _
ValueOf:="0", _
ByChange:=Range("$K$10:$K$11")
SolverAdd CellRef:="$K$11", Relation:=3, FormulaText:="0"
SolverAdd CellRef:="$K$10", Relation:=3, FormulaText:="0"
SolverSolve userFinish:=True
Application.ScreenUpdating = True
End If
End Sub
Da der Wert aber durch eine Formel geändert wird, wird "Worksheet_Change" nicht aktiv. Wie kann ich das ganze mit worksheet_calculate oder ähnliches umbauen.
Bei mir stürzt Excel dauernd ab, denke mal das ich da in eine Endlosschleife laufe. Kann ich im "worksheet_calculate" Event dieses für einen Durchlauf deaktivieren?
Wäre sehr Dankbar für eure Hilfe

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: workbook_calculate und solver
10.03.2010 16:04:32
Heiko
Hallo Josef,
wie du selber richtig sagst, du mußt das "Worksheet_Calculate" Event nutzen, aber da gibt es keine Target Rückgabe also mußt du ein bisschen umbauen.
Und um die Endlosschleife zu verhindern nutze Application.EnableEvents, wie siehe VBA Hilfe.
Gruß Heiko
AW: workbook_calculate und solver
10.03.2010 16:23:42
fcs
Hallo Josef,
probiere mal die folgende Variante (ungetestet).
Gruß
Franz
Option Explicit
Private ValueH10, ValueH11
Private Sub Worksheet_Calculate()
If ValueH10  Range("H10") Or ValueH11  Range("H11") Then
Application.EnableEvents = False
Application.ScreenUpdating = False
SolverReset
SolverOk SetCell:="$N$81", _
MaxMinVal:=2, _
ValueOf:="0", _
ByChange:=Range("$K$10:$K$11")
SolverAdd CellRef:="$K$11", Relation:=3, FormulaText:="0"
SolverAdd CellRef:="$K$10", Relation:=3, FormulaText:="0"
SolverSolve userFinish:=True
Application.ScreenUpdating = True
ValueH10 = Range("H10")
ValueH11 = Range("H11")
Application.EnableEvents = True
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Initialisieren der  beiden Variablenwerte nach Selektion einer Zelle
If IsEmpty(ValueH10) And IsEmpty(ValueH10) Then
ValueH10 = Range("H10")
ValueH11 = Range("H11")
End If
End Sub

Anzeige
AW: workbook_calculate und solver
10.03.2010 17:23:08
Josef
Hallo Franz
Du bist der Wahnsinn, das funktioniert, genauso wie ich mir das vorgestellt hat.
Wenn ich das richtig verstehe, initialisierst du mit "Worksheet_SelectionChange" die vorher festgelegten Variablen vom Typ Variant nur einmal, weil IsEmty sollte dann nicht mehr "true" zurückgeben.
Sobald sich jetzt die Ergebnisse in den gewünschten Zellen ändern, wird, wie auch von Heiko vorgeschlagen, mit "Application.EnableEvents = False" gleich mal verhindert, das öfter hineingesprungen wird.
Nach meinem Solverbaustein wird dann der Zellenwert in die Variable geschrieben um für die nächste Abfrage in "Worksheet_SelectionChange" erst wieder hineinzuspringen wenn sich auch wirklich wieder was ändert.
Korrigiere mich falls ich etwas nicht ganz richtig verstehe.
Ansonsten funktionierts genauso wie gewünscht.
Aller größten Dank.
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige