Maison  >  Article  >  développement back-end  >  Comment modifier des cellules dans les UDF Excel sans renvoyer de tableau ?

Comment modifier des cellules dans les UDF Excel sans renvoyer de tableau ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-14 16:59:02808parcourir

How to Modify Cells in Excel UDFs Without Returning an Array?

UDF Excel : modification de cellules sans renvoyer de tableau

Dans Excel, les fonctions définies par l'utilisateur (UDF) renvoient généralement des valeurs ou des tableaux. Cependant, il existe des scénarios dans lesquels une UDF doit modifier d'autres cellules sans renvoyer de tableau. Ceci peut être réalisé grâce à une technique complexe qui implique des minuteries Windows et des événements Application.OnTime.

Le problème :

Considérons un UDF nommé New_Years qui prend deux ans en entrée. et renvoie un tableau de dates du Nouvel An entre ces années. Cependant, pour remplir le tableau dans Excel, l'utilisateur doit sélectionner manuellement les cellules, saisir la formule et appuyer sur Ctrl Maj Entrée. Cette limitation empêche l'UDF de remplir automatiquement les dates.

La solution :

Malgré la restriction d'Excel sur les UDF modifiant directement les cellules, une solution de contournement utilisant les minuteries et l'application Windows. Les événements OnTime le rendent possible. En démarrant un minuteur Windows à partir de l'UDF, un minuteur Application.OnTime ultérieur peut être programmé pour exécuter des actions qui seraient autrement interdites dans un UDF.

Exemple de code :

Le code suivant montre comment implémenter cette technique en utilisant une collection pour stocker les références des cellules où l'UDF est appelée. Deux routines de minuterie, AfterUDFRoutine1 et AfterUDFRoutine2, sont utilisées pour gérer les événements de minuterie.

Public Sub AfterUDFRoutine1()
  ' Stop the Windows timer
  If mWindowsTimerID <> 0 Then KillTimer 0&, mWindowsTimerID

  ' Cancel any previous OnTime timers
  If mApplicationTimerTime <> 0 Then
    Application.OnTime mApplicationTimerTime, "AfterUDFRoutine2", , False
  End If

  ' Schedule timer
  mApplicationTimerTime = Now
  Application.OnTime mApplicationTimerTime, "AfterUDFRoutine2"
End Sub

Public Sub AfterUDFRoutine2()
  Dim Cell As Range
  ' ... Do tasks not allowed in a UDF ...
End Sub

Utilisation :

Pour appliquer cette technique, une UDF (par exemple, AddTwoNumbers ) peut être créé dans un module standard. Dans l'UDF, les routines de minuterie sont démarrées et la référence de cellule de la cellule appelante est stockée dans la collection. Les routines de minuterie modifient ensuite les cellules requises en dehors de la portée de l'UDF.

En tirant parti des minuteries Windows et des événements Application.OnTime, il devient possible de créer des UDF qui modifient les cellules sans renvoyer de tableau. Cette technique permet une plus grande automatisation et élimine le besoin de remplissage manuel des tableaux par l'utilisateur.

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