Was ich brauche: Wenn ein Makro ausgelöst werden soll, nennen wir das Makro "MacroRuns", wenn Zelle C3 einen anderen Wert zurückgibt als derzeit, basierend auf ihrer FORMEL, NICHT basierend auf der manuellen Eingabe eines anderen Wert.

Ich habe den ganzen Tag damit verbracht, jede "Lösung" auf den ersten beiden Seiten meiner Google-Suche zu diesem Thema durchzulesen und zu versuchen. Bisher scheint nichts für mich zu funktionieren. Bitte helfen Sie !!! Ich würde es sehr schätzen!

Beispiel:

Ich habe es jetzt versucht, aber es beschädigt meine Datei, nachdem es einige Male funktioniert hat.

Private Sub Worksheet_Calculate()
    If Range("E3") <> Range("C3").Value Then
        Range("E3") = Range("B3").Value
        MsgBox "Successful"
    End If
End Sub
2
soundship 17 Jän. 2019 im 22:41

3 Antworten

Beste Antwort

Modul1, Blatt1 (Berechnen), ThisWorkbook (Öffnen)

Höhepunkte

  • Wenn die Arbeitsmappe geöffnet wird, wird der Wert von C3 in die Öffentlichkeit eingelesen Variable TargetValue über TargetStart.
  • Wenn der Wert in C3 berechnet wird, wird TargetCalc aktiviert Wenn sich der aktuelle Wert in C3 von TargetValue unterscheidet, wird MacroRuns ausgelöst und TargetValue mit dem Wert in C3 aktualisiert.

Der Code

Modul1

Option Explicit

Public TargetValue As Variant
Private Const cTarget As String = "C3"

Sub TargetCalc(ws as Worksheet)
    If ws.Range(cTarget) <> TargetValue Then
        MacroRuns
        TargetValue = ws.Range(cTarget).Value
    End If
End Sub

Sub TargetStart()
    TargetValue = Sheet1.Range(cTarget).Value
End Sub

Sub MacroRuns()
    MsgBox "MacroRuns"
End Sub

ThisWorkbook

Option Explicit

Private Sub Workbook_Open()
    TargetStart
End Sub

Blatt1

Option Explicit

Private Sub Worksheet_Calculate()
    TargetCalc Me
End Sub
2
VBasic2008 17 Jän. 2019 im 20:51

Recht. Ich muss hier ein Nugget hinzufügen, was mich beim Versuch mit Ferdinandos Code völlig frustriert hat (was an sich sehr ordentlich ist, danke, Ferdinando !!)

Der Hauptpunkt ist - wenn Sie etwas anderes als nur eine Nachrichtenbox verwenden möchten (MsgBox "Zelle hat sich geändert."), Müssen Sie die folgenden Zeilen über UND unter dieser Zeile hinzufügen (andernfalls stürzt Excel aufgrund endloser Versuche einfach ständig ab das Gleiche tun). Fragen Sie mich nicht, warum das so ist, aber ich habe mein Problem damit endlich gelöst. Also hier sind die Zeilen:

If Value1 <> Value2 Then
(ADD THIS:)     Application.EnableEvents = False
                MsgBox "Cell has changed."
(I call a macro running a query from MySQL instead of MsgBox)
(AND ADD THIS:) Application.EnableEvents = True

Hoffe das hilft jedem in der Situation, in der ich war !!

0
user11749857 7 Juli 2019 im 07:55

Wenn ich Ihre Frage verstanden habe, können Sie diesen Code ausprobieren:

1) Klicken Sie mit der rechten Maustaste auf die Registerkarte Blatt, und klicken Sie dann auf Code anzeigen

2) Kopieren Sie diesen Code:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Value1 As Variant
Static Value2 As Variant

Value1 = Range("C3").value

If Value1 <> Value2 Then
   MsgBox "Cell has changed."
End If

Value2 = Range("C3").value

End Sub

Ich habe es versucht:

In Zelle C3 habe ich = SUM (A1: B1) geschrieben, wenn ich versuche, den Wert in diesen Zellen zu ändern. Auch C3 ändert sich und ich bekomme die msgBox

Hoffe das hilft

-1
Ferdinando 17 Jän. 2019 im 21:03