2017-02-18 4 views
3

ich um dieses Thema viele Beiträge gelesen habe, aber nichts für mein Szenario scheint zu funktionierenWorksheet_Change nicht nach oben abfeuert, wenn Live-Streaming-Daten

würde Ich mag zu Call Sub auf Zellenwechsel (B2), die Futtermittel Live-Daten enthält von einer externen Quelle - last updated:

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

ging ich, wenn Äpplication.EnableEvents = True zu überprüfen, was darauf hindeutet, oder erstellen Funktion zahlreiche Beiträge über die Änderung zu erkennen (die Arbeit der Fall ist, aber ich kann sub innerhalb Funktion nicht aufrufen) - ohne Erfolg.

Interestnigly enough, when I click on B2 and press enter - it executes the sub

Dank

+1

Der Code sieht korrekt aus. Haben Sie den Code in den Arbeitsblattobjekten für das Blatt gespeichert, das ausgelöst werden soll? Wenn Sie es nur in einem Modul speichern, wird es nicht funktionieren. –

+2

Warum brauchen Sie 'Wenn nicht schneiden (Target, Target.Worksheet.Range (" B2 ")) Ist nichts Then', verwenden Sie einfach' Wenn nicht schneiden (Ziel, Bereich ("B2")) ist nichts Then' –

+0

Thx für Ihre Antwort - Ja, der Code ist in dem Arbeitsblatt, das ich verwende. Ziemlich interessant, wenn ich auf B2 drücke und die Eingabetaste drücke - es führt das Sub aus. –

Antwort

4

Say Zelle A1 wird von Streaming aktualisiert gehen kann. Das Update wird nicht ausgelöst entweder:

  • Worksheet_SelectionChange
  • Worksheet_Change

Was Sie tun müssen, ist Setup eine Gleichung irgendwo:

=A1 

Wenn A1 aktualisiert wurde, wurden die Formelzelle wird neu berechnet und Sie können es mit dem Calculate Event erkennen.

+0

Ahhh - das 'Calculate' Event - natürlich! Das wird auch an der Zelle B2 des OP funktionieren, weil es nur eine Formel ist. – YowE3K

+1

Dies ist nicht ganz korrekt, da das OP nicht angibt, was sie unter "Streaming" verstehen. Wenn die Eigenschaft "Zelle A1-Wert" geändert wird, löst dies ein Worksheet_Change-Ereignis aus (z. B. COM, das nach Excel schreibt). Wenn der Benutzer eine andere Zelle auswählt, wird das Worksheet_SelectionChange-Ereignis ausgelöst. Wenn Zelle A1 eine Formel ist und die Formel neu berechnet wird, wird Worksheet_Calculate ausgelöst (z. B. DDE oder von einem anderen Worksheet neukalibriert). Es kann auch sein, dass der Benutzer das falsche Arbeitsblatt überwacht, um das "echte" Streaming-Ereignis zu erfassen. – user3357963

+0

@ user3357963 Sie Kommentare sind nützlich ... der Vorteil der Verwendung von * Calculate * ist, dass ich nie gewusst habe, dass es fehlschlägt ... Die Schwierigkeit bei der Verwendung von * Calculate * ist die Chance, falsche Trigger zu erhalten, wenn das Arbeitsblatt für andere berechnet wird Gründe dafür. –

1

Sie einfach

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Address = "$B$2" Then SubName 
End Sub 
+0

@ YowE3K, ja, ich lag falsch in der Worksheet-Eigenschaft des Range-Objekts. Ich habe es nie benutzt und verwende immer "Eltern" -Eigenschaft. Ich habe den Code bearbeitet. danke – user3598756

+0

Leider funktioniert diese auch nicht. Was mich verwirrt ist, dass, wenn ich auf B2 klicke und Enter drücke, es wie erwartet funktioniert (ruft das Sub) –

+0

wie wird diese Zelle normalerweise aktualisiert? – user3598756