it-swarm.com.de

VBA-Code zum Anzeigen des Meldungsfeld-Popups, wenn die Formel in der Zielzelle einen bestimmten Wert überschreitet

Ich versuche, ein einfaches Makro zu schreiben, um ein Popup (vbOKOnly) anzuzeigen, wenn der Wert in einer Zelle einen bestimmten Wert überschreitet.

Ich habe im Grunde ein Arbeitsblatt mit Produkten und Rabatten. Ich habe eine Formel in einer Zelle, z. B. A1, die den Rabatt als prozentualen (50% oder 0,5) effektiven Rabatt aller Einträge anzeigt.

Was ich suche, ist Code zum Anzeigen eines Meldungsfelds, wenn der Wert von Zelle A1 beispielsweise 50% überschreitet, weil die Eingabe einer anderen Zelle den Rabatt über 50% hinausgeschoben hat.

Vielen Dank!

9
Hatt

Sie können Ihrem Blatt den folgenden VBA-Code hinzufügen:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("A1") > 0.5 Then
        MsgBox "Discount too high"
    End If
End Sub

Jedes Mal, wenn eine Zelle auf dem Blatt geändert wird, wird der Wert von Zelle A1 überprüft.

Anmerkungen:

  • wenn A1 auch von Daten in anderen Arbeitsblättern abhängt, wird das Makro nicht aufgerufen, wenn Sie diese Daten ändern.
  • das Makro wird jedes Mal aufgerufen, wenn sich etwas auf Ihrem Blatt ändert. Wenn es viele Formeln hat (wie bei 1000), kann es langsam sein.

Widor verwendet einen anderen Ansatz (Worksheet_Calculate Anstatt von Worksheet_Change):

  • Vorteile: Diese Methode funktioniert, wenn der Wert von A1 mit Zellen in anderen Arbeitsblättern verknüpft ist.
  • Nachteile: Wenn Ihr Blatt viele Links enthält, die auf andere Blätter verweisen, wird seine Methode etwas langsamer ausgeführt.

Fazit : benutze Worksheet_Change Wenn A1 nur von Daten abhängt, die sich auf demselben Blatt befinden, verwenden Sie Worksheet_Calculate wenn nicht.

17
assylias

Im Wesentlichen möchten Sie dem Ereignis Calculate des betreffenden Arbeitsblatts Code hinzufügen.

Doppelklicken Sie im Projektfenster des VBA-Editors auf das Blatt, dem Sie Code hinzufügen möchten, und wählen Sie in den Dropdown-Listen oben im Editorfenster links und rechts 'Arbeitsblatt' und 'Berechnen' aus.

Alternativ können Sie den folgenden Code in den Editor des gewünschten Arbeitsblatts kopieren:

Private Sub Worksheet_Calculate()

If Sheets("MySheet").Range("A1").Value > 0.5 Then
    MsgBox "Over 50%!", vbOKOnly
End If

End Sub

Auf diese Weise wird bei jeder Neuberechnung des Arbeitsblatts überprüft, ob der Wert> 0,5 oder 50% ist.

2
Widor

Ich denke nicht, dass ein Meldungsfeld der beste Weg ist, dies zu tun, da Sie den Code VB in einer Schleife ausführen müssen, um den Zelleninhalt zu überprüfen, oder wenn Sie nicht vorhaben, das Makro auszuführen In diesem Fall ist es meiner Meinung nach besser, der Zelle eine bedingte Formatierung hinzuzufügen, um den Hintergrund (beispielsweise) in Rot zu ändern, wenn der Wert die Obergrenze überschreitet.

1
Matt Donnan