2016-04-09 21 views
0

habe ich eine Funktion und speicherte es in dem Hauptmodul wie folgt:Application.Volatile: Warum funktioniert es nicht wie erwartet?

Public Function Teste() As Variant 
    Application.Volatile 
    MsgBox "rodou" 
    Teste = "" 
End Function 

Berechnungsoptionen-Automatische gesetzt. In der Zelle, legte ich die Formel (zB. = Teste()), das erwarten würde Teste Funktion, jedes Mal laufen würde ich jede Zelle ändern, da Application.Volatile meiner Funktion als Schmutzige setzt, zwingt Excel um die Funktion auszuführen.

Was passiert ist, dass Teste Funktion nicht aufgerufen wird, es sei denn ich eine der Zellen setzen, die in der ändern Ereignis des Arbeitsblatt aktualisiert werden (zB. = Teste (B2)).

Was ich will ist nur zu laufen Teste Funktion jedes Mal, wenn ich Änderungen im Arbeitsblatt.

Vielen Dank im Voraus.

+1

@ Gary'sStudent Das ist nicht richtig. Excel berechnet flüchtige Funktionen bei jeder Änderung einer beliebigen Zelle in einer Arbeitsmappe neu. Dieses Verhalten ist der eigentliche Punkt von 'Volatile'. In der Tat kann ich das Problem des OP nicht reproduzieren, ich bekomme die Nachrichtenbox, wenn ich irgendeine Zelle ändere. – GSerg

+0

Dokumentation sagt: "_This Methode hat keine Auswirkungen, wenn es nicht innerhalb einer benutzerdefinierten Funktion ist __das verwendet, um eine Arbeitsblatt Zelle___ zu berechnen". Qeustion ist, ob das bedeutet, dass die Funktion in einer Arbeitsblattzelle verwendet wird oder die Funktion eine (andere) Arbeitsblattzelle in ihrem Code ändert. Excel kann wissen, ob die Funktion beim Kompilieren funktioniert oder nicht. Diese Funktion ändert keine Arbeitsblattzelle in ihrem Code und wird daher möglicherweise nicht aufgerufen. –

+0

@PaulOgilvie Die Dokumentation bedeutet "Diese Methode hat keine Wirkung, wenn die Funktion nicht in einer Zelle platziert wurde." Wenn Sie eine Funktion erstellen und diese nur im Code verwenden und sie niemals in eine Zelle einfügen, hat 'Volatile' keine Auswirkungen. Außerdem darf [keine VBA-Funktion Zellen ändern] (http://stackoverflow.com/q/13705663/11683). – GSerg

Antwort

0

es funktioniert jetzt! Nach dem Kompilieren von VBA-Code, Teste Funktion wird jetzt jedes Mal ausgeführt, wenn ich Änderungen in einer beliebigen Zelle des Arbeitsblatts. Diese Information ist in dem Post geteilt von @Paul Ogilvie (stackoverflow.com/questions/29915312/…).

danke euch allen für die schnelle Hilfe!

Verwandte Themen