Maison >développement back-end >C++ >Comment les FDU qui ne changent pas de tableau peuvent-elles être implémentées dans les compléments Excel ?

Comment les FDU qui ne changent pas de tableau peuvent-elles être implémentées dans les compléments Excel ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-16 05:52:03466parcourir

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

Implémentation de UDF ne modifiant pas de tableau dans les compléments Excel

Dans les compléments Excel, les UDF qui modifient les valeurs des cellules sont généralement interdites. Cependant, il est possible de contourner cette restriction en utilisant une combinaison de minuteries Windows et de minuteries Application.OnTime.

Limitation de la minuterie Windows

Les minuteries Windows ne peuvent pas exécuter de code VBA pendant que les cellules sont en cours d'édition ou des boîtes de dialogue sont ouvertes. Cette limitation les empêche de modifier directement les propriétés des cellules dans les UDF.

Solution : Application.OnTime Timer

Pour contourner cette limitation, une minuterie Windows est utilisée dans l'UDF pour planifier une minuterie Application.OnTime. Les minuteries Application.OnTime sont sûres et ne sont déclenchées que lorsqu'une cellule n'est pas en cours de modification et qu'aucune boîte de dialogue n'est ouverte.

Implémentation UDF

  1. Créer un module standard : Placez le code suivant dans un module VBA standard, pas dans un module UDF.
  2. Implémentation UDF (AddTwoNumbers) : Dans l'UDF AddTwoNumbers, calculez l'UDF somme comme d'habitude. Après le calcul :

    • Mettez en cache la référence de cellule de l'appelant dans une collection.
    • Définissez une minuterie Windows pour démarrer la routine de minuterie AfterUDFRoutine1.
  3. Routine de première minuterie (AfterUDFRoutine1) :

    • Arrêtez le minuteur Windows.
    • Planifiez le minuteur Application.OnTime sécurisé pour AfterUDFRoutine2.
  4. Deuxième routine de minuterie (AfterUDFRoutine2) :

    • Effectuer des tâches qui ne sont pas autorisées dans les UDF, telles que modifier les valeurs des cellules, désactiver mise à jour de l'écran ou changement de mode de calcul.

Exemple d'utilisation

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

Lors du calcul, les formules de cellule seront modifiées en refléter la nouvelle valeur, en définissant la cellule à côté de l'appelant sur sa valeur actuelle.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn