Heim >Backend-Entwicklung >C++ >Wie können nicht-arrayverändernde UDFs in Excel-Add-Ins implementiert werden?

Wie können nicht-arrayverändernde UDFs in Excel-Add-Ins implementiert werden?

Susan Sarandon
Susan SarandonOriginal
2024-11-16 05:52:03475Durchsuche

How Can Non-Array Changing UDFs be Implemented in Excel Add-Ins?

Implementieren von nicht-arrayverändernden UDFs in Excel-Add-Ins

In Excel-Add-Ins sind UDFs, die Zellwerte ändern, generell verboten. Es ist jedoch möglich, diese Einschränkung mithilfe einer Kombination aus Windows-Timern und Application.OnTime-Timern zu umgehen.

Windows-Timer-Einschränkung

Windows-Timer können keinen VBA-Code ausführen, während Zellen sind gerade bearbeitet werden oder Dialoge geöffnet sind. Diese Einschränkung verhindert, dass sie Zelleneigenschaften innerhalb von UDFs direkt ändern.

Lösung: Application.OnTime Timer

Um diese Einschränkung zu umgehen, wird innerhalb des UDF ein Windows-Timer verwendet Planen Sie einen Application.OnTime-Timer. Application.OnTime-Timer sind sicher und werden nur ausgelöst, wenn eine Zelle nicht bearbeitet wird und keine Dialoge geöffnet sind.

UDF-Implementierung

  1. Erstellen ein reguläres Modul: Platzieren Sie den folgenden Code in einem regulären VBA-Modul, nicht in einem UDF-Modul.
  2. UDF-Implementierung (AddTwoNumbers): Berechnen Sie innerhalb der AddTwoNumbers-UDF die Summe wie gewohnt. Nach der Berechnung:

    • Cache die Zellreferenz des Anrufers in einer Sammlung.
    • Stelle einen Windows-Timer ein, um die Timer-Routine AfterUDFRoutine1 zu starten.
  3. Erste Timer-Routine (AfterUDFRoutine1):

    • Stoppen Sie den Windows-Timer.
    • Planen Sie den sicheren Application.OnTime-Timer für AfterUDFRoutine2.
  4. Zweite Timer-Routine (AfterUDFRoutine2):

    • Führen Sie Aufgaben aus, die in UDFs nicht zulässig sind, z. B. das Ändern von Zellwerten oder das Deaktivieren Bildschirmaktualisierung oder Änderung des Berechnungsmodus.

Beispielverwendung

Private Sub TestAddTwoNumbers()
    Dim Cell As Range

    Set Cell = Range("A1")

    ' Cache the reference in the UDF
    Cell.Formula = "=AddTwoNumbers(1, 2)"

    ' Trigger the timer routine
    Cell.Calculate
End Sub

Bei der Berechnung werden die Zellformeln in geändert Geben Sie den neuen Wert wieder, indem Sie die Zelle neben dem Anrufer auf den aktuellen Wert setzen.

Das obige ist der detaillierte Inhalt vonWie können nicht-arrayverändernde UDFs in Excel-Add-Ins implementiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn