Frage

Wie kann ich ein Excel-Makro jedes Mal einen Wert in einer bestimmten Zelle Änderungen automatisch durchführen?

Im Moment mein Arbeitscode lautet:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("H5")) Is Nothing Then Macro
End Sub

wo "H5" ist die bestimmte Zelle überwacht und Macro ist der Name des Makros.

Gibt es einen besseren Weg?

War es hilfreich?

Lösung

Ihr Code sieht ziemlich gut aus.

Seien Sie vorsichtig, aber für Ihren Anruf Range("H5") eine Verknüpfung Befehl Application.Range("H5") ist, die Application.ActiveSheet.Range("H5") entspricht. Dies könnte in Ordnung sein, wenn die einzigen Änderungen Benutzer-Änderungen sind - das ist die typischste ist - aber es ist möglich, dass die Zellenwerte des Arbeitsblatts zu ändern, wenn es nicht das aktive Blatt über programmatische Änderungen, z.B. VBA.

In diesem Sinne würde ich Target.Worksheet.Range("H5") nutzen:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Target.Worksheet.Range("H5")) Is Nothing Then Macro
End Sub

Sie können auch Me.Range("H5") verwenden, wenn die Event-Handler auf der Codepage für das Arbeitsblatt in Frage (es ist in der Regel):

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("H5")) Is Nothing Then Macro
End Sub

Hope, das hilft ...

Andere Tipps

Gehen Sie mit dem Worksheet_Change Ereignis oder das Workbook_SheetChange Ereignis.

Die Ereignishandler nehmen ein Argument „Target As Range“, so dass Sie überprüfen können, ob der Bereich, der Wechsel ist, schließt die Zelle, die Sie interessiert sind.

Ich ziehe es auf diese Weise, nicht unter Verwendung einer Zelle, sondern ein Bereich

    Dim cell_to_test As Range, cells_changed As Range

    Set cells_changed = Target(1, 1)
    Set cell_to_test = Range( RANGE_OF_CELLS_TO_DETECT )

    If Not Intersect(cells_changed, cell_to_test) Is Nothing Then 
       Macro
    End If

Ich verbrachte viel Zeit diese Erforschung und zu lernen, wie das alles funktioniert, nach vermasselt wirklich das Ereignis auslöst. Da es so viele Informationen verstreut wurde ich beschlossen, zu teilen, was ich gefunden habe, alles an einem Ort zu arbeiten, Schritt für Schritt wie folgt:

1) Öffnen VBA-Editor unter VBA-Projekt (YourWorkBookName.xlsm) öffne Microsoft Excel-Objekt und wählen Sie das Blatt zu dem das Änderungsereignis betreffen wird.

2) Die Standard-Code-Ansicht ist "General". Aus der Dropdown-Liste in der oberen Mitte, wählen Sie „Arbeitsblatt.“

3) Private Sub Worksheet_SelectionChange ist schon da, wie es sein sollte, es in Ruhe lassen. Kopieren / Einfügen Mike Rosenblum Code von oben und den .Range Bezug auf die Zelle ändern, für die Sie für eine Veränderung beobachten (B3, in meinem Fall). Stellen Sie keine Ihr Makro noch jedoch (I entfernt, um das Wort „Makro“ nach „Then“):

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("H5")) Is Nothing Then
End Sub

oder aus der Dropdown-Liste oben links, wählen Sie "Change" und in dem Raum zwischen Privaten Sub und End Sub, Paste If Not Intersect(Target, Me.Range("H5")) Is Nothing Then

4) auf der Linie nach „Dann“ Ereignisse deaktivieren, so dass, wenn Sie Ihr Makro aufrufen, ist es nicht Ereignisse auslösen und versuchen, diese Worksheet_Change wieder laufen in einem nie endenden Zyklus, der Excel-Abstürze und / oder sonst vermasselt alles oben :

Application.EnableEvents = False

5) Rufen Sie das Makro

Call YourMacroName

6) Drehen Ereignisse wieder auf, so dass die nächste Änderung (und jede / alle anderen Ereignisse) Trigger:

Application.EnableEvents = True

7) beenden Wenn der Block und die Sub:

    End If
End Sub

Der gesamte Code:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("B3")) Is Nothing Then
        Application.EnableEvents = False
        Call UpdateAndViewOnly
        Application.EnableEvents = True
    End If
End Sub

Dies geschieht Drehen Ereignisse an / aus der Module aus, die Probleme und einfach läßt die Änderung Trigger erzeugt, Ereignisse abschaltet, läuft das Makro und dann auch Ereignisse wieder an.

Ich habe eine Zelle, die häufig auf Online-Aktien Datenbank und aktualisiert verknüpft ist. Ich möchte ein Makro auslösen, wenn der Zellenwert aktualisiert wird.

Ich glaube, das durch ein Programm oder eine externe Datenaktualisierung zu Zelle Wertänderung ähnlich ist, aber oben Beispiele irgendwie für mich nicht funktionieren. Ich denke, das Problem liegt daran, dass Excel-interne Ereignisse nicht ausgelöst werden, aber das ist meine Vermutung.

Ich habe die folgende,

Private Sub Worksheet_Change(ByVal Target As Range) 
  If Not Intersect(Target, Target.Worksheets("Symbols").Range("$C$3")) Is Nothing Then
   'Run Macro
End Sub
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top