Supportnet / Forum / Tabellenkalkulation
VBA > Prüfung eines Formelergebnisses
Frage
Hallo.
Bin totale VBA-Anfängerin.
Habe ein Makro, bei dem eine Messagebox aufgehen soll, wenn eine Zelle einen bestimmten Textwert annimmt.
Dummerweise wird dieser Text über eine IF-Formel generiert und bei dem von mir verwendeten Code dadurch nicht als solcher erkannt:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$F$4" Then
If Target.Value = "Completed" Then
MsgBox "Limit erreicht"
End If
End If
End Sub
Wie bekomme ich es hin, dass sich die Prüfung direkt auf das "Formelergebnis" bezieht?
Außerdem wüsste ich gern, wie ich die Prüfung auf eine ganze Spalte anwenden kann.
Hoffe, habe mich halbwegs verständlich ausgedrückt und warte auf Eure Tips...
Antwort 1 von JoeKe
Hallo Xuse,
Target ist die Zelle die geändert wird. Dem entsprechend musst du die Überprüfung durchführen.
Angenommen die Eingabe, die bewirkt das in F4 "Completed" steht, wird in E4 gemacht, dann muss dein Code so aussehen:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(Target.Row, Target.Column + 1) = "Completed" Then
MsgBox "Limit erreicht"
End If
End Sub
Gruß
JöKe
Target ist die Zelle die geändert wird. Dem entsprechend musst du die Überprüfung durchführen.
Angenommen die Eingabe, die bewirkt das in F4 "Completed" steht, wird in E4 gemacht, dann muss dein Code so aussehen:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(Target.Row, Target.Column + 1) = "Completed" Then
MsgBox "Limit erreicht"
End If
End Sub
Gruß
JöKe
Antwort 2 von Xuse
Hallo JöKe,
danke für den Tip > funktioniert super, wenn in E4 eine direkte Eingabe erfolgt.
Leider wird der Wert, der bewirkt, dass im nächsten Feld "Completed" steht, ebenfalls über eine Formel berechnet. Und dann klappt das leider nicht mehr :-(
Hast Du dafür auch eine Lösung?
Danke & Gruß,
Xuse
danke für den Tip > funktioniert super, wenn in E4 eine direkte Eingabe erfolgt.
Leider wird der Wert, der bewirkt, dass im nächsten Feld "Completed" steht, ebenfalls über eine Formel berechnet. Und dann klappt das leider nicht mehr :-(
Hast Du dafür auch eine Lösung?
Danke & Gruß,
Xuse
Antwort 3 von JoeKe
Hallo Xuse,
du musst meinen Code nur entsprechend anpassen.
If Cells(Target.Row +x, Target.Column +y) = "Completed"
x = die Zeilen die die Eingabezelle von F4 weg ist.
y = die Spalten die die Eingabezelle von F4 weg ist.
x und y sind positiv, wenn sie vor F4 liegen und nagativ wenn sie hinter F4 liegen.
Gruß
JöKe
du musst meinen Code nur entsprechend anpassen.
If Cells(Target.Row +x, Target.Column +y) = "Completed"
x = die Zeilen die die Eingabezelle von F4 weg ist.
y = die Spalten die die Eingabezelle von F4 weg ist.
x und y sind positiv, wenn sie vor F4 liegen und nagativ wenn sie hinter F4 liegen.
Gruß
JöKe
Antwort 4 von Xuse
Hm, so funktioniert das leider nicht, da ich nirgends in dem Sheet eine direkte Eingabe, sondern nur Formelverweise habe. Und dann scheint das Makro die Änderung des Ausgabewertes der Formel überhaupt nicht als Änderung wahrzunehmen...
Antwort 5 von Xuse
Trotzdem danke!
:-)
:-)
Antwort 6 von JoeKe
Hallo Xuse,
wann und wo soll den die Anzeige "Limit erreicht" erfolgen?
Auf dem Blatt in dem in F4 "Completed" steht?
Was ich bisher verstanden habe:
Es werden auf Blättern Eingaben gemacht.
Du hast ein Blatt auf dem mit diesen Eingaben Berechnungen gemacht werden.
In F4 wird, wenn eine Bedingung erfüllt ist "Completed" eingetragen.
Du möchtest zusätzlich eine Meldung "Limit erreicht".
Wenn du die Meldung "Limit erreicht" erhalten möchtest, während du auf einem anderen Blatt Eingaben machst, kopiere folgenden Code in das VBA-Projekt der Tabelle in der du die Eingaben machst:
Private Sub Worksheet_Change(ByVal Target As Range)
If Worksheets("Tabelle1").Range("F4") = "Completed" Then MsgBox "Limit erreicht"
End Sub
Tabelle1 ist das Blatt auf dem deine Berechnungen gemacht werden.
Gruß
JöKe
wann und wo soll den die Anzeige "Limit erreicht" erfolgen?
Auf dem Blatt in dem in F4 "Completed" steht?
Was ich bisher verstanden habe:
Es werden auf Blättern Eingaben gemacht.
Du hast ein Blatt auf dem mit diesen Eingaben Berechnungen gemacht werden.
In F4 wird, wenn eine Bedingung erfüllt ist "Completed" eingetragen.
Du möchtest zusätzlich eine Meldung "Limit erreicht".
Wenn du die Meldung "Limit erreicht" erhalten möchtest, während du auf einem anderen Blatt Eingaben machst, kopiere folgenden Code in das VBA-Projekt der Tabelle in der du die Eingaben machst:
Private Sub Worksheet_Change(ByVal Target As Range)
If Worksheets("Tabelle1").Range("F4") = "Completed" Then MsgBox "Limit erreicht"
End Sub
Tabelle1 ist das Blatt auf dem deine Berechnungen gemacht werden.
Gruß
JöKe
Antwort 7 von Xuse
Hallo JöKe,
das ist ja die Krux > es werden gar keine Eingaben gemacht. Die Berechnungen erfolgen auf Grundlage eines direkten Datenfeeds...
Wahrscheinlich ist ein Change-Worksheet einfach die falsche Wahl. Wie gesagt - bin bisher total unerfahren mit VBA.
Sorry für die Verwirrung.
Xuse
das ist ja die Krux > es werden gar keine Eingaben gemacht. Die Berechnungen erfolgen auf Grundlage eines direkten Datenfeeds...
Wahrscheinlich ist ein Change-Worksheet einfach die falsche Wahl. Wie gesagt - bin bisher total unerfahren mit VBA.
Sorry für die Verwirrung.
Xuse
Antwort 8 von JoeKe
Hallo,
vielleicht hilf dir "Worksheet_Calculate" damit würde bei jeder Berechnung die Überprüfung ob in F4 "Completed" steht durchgeführt. Allerdings erhälst du dann bei jeder Berechnung die Meldung sobald die Bedingung erfüllt ist.
Gruß
JöKe
vielleicht hilf dir "Worksheet_Calculate" damit würde bei jeder Berechnung die Überprüfung ob in F4 "Completed" steht durchgeführt. Allerdings erhälst du dann bei jeder Berechnung die Meldung sobald die Bedingung erfüllt ist.
Gruß
JöKe
Antwort 9 von Xuse
Yep, das funktioniert!
Hab noch einen Parameter eingebaut um die Prüfung zu stoppen und jetzt klappt´s :-)
Danke & schönen Feierabend.
Xuse
Hab noch einen Parameter eingebaut um die Prüfung zu stoppen und jetzt klappt´s :-)
Danke & schönen Feierabend.
Xuse