Maison >développement back-end >C++ >Les UDF Excel peuvent-elles modifier des cellules sans renvoyer de tableaux ?

Les UDF Excel peuvent-elles modifier des cellules sans renvoyer de tableaux ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-24 21:48:47893parcourir

Can Excel UDFs Modify Cells Without Returning Arrays?

FDU Excel : modifier des cellules sans renvoyer de tableaux

L'une des limites des fonctions définies par l'utilisateur (FDU) dans Excel est leur incapacité à modifier directement les cellules ou les propriétés du classeur. Cependant, il existe une solution de contournement, bien que complexe, qui permet aux UDF de modifier les cellules.

Utiliser les minuteurs de Windows et d'application pour contourner les restrictions UDF

Pour modifier les cellules à partir d'un UDF, une combinaison intelligente de minuteries Windows et de minuteries Application.OnTime est utilisée. Le minuteur Windows lance un minuteur Application.OnTime, qui exécute le code en toute sécurité lorsqu'Excel autorise les modifications de cellule.

Implémentation

L'UDF appelle la routine du minuteur Windows, qui planifie une Minuterie Application.OnTime avec un paramètre de temps spécifique. La routine Application.OnTime exécute ensuite le code qui ne peut pas être exécuté dans l'UDF elle-même.

Exemple de code

Le code suivant montre comment cette solution de contournement est implémentée :

Public Function AddTwoNumbers(ByVal Value1 As Double, ByVal Value2 As Double) As Double
  AddTwoNumbers = Value1 + Value2
  ' Schedule the Windows timer
  mWindowsTimerID = SetTimer(0&, 0&, 1, AddressOf AfterUDFRoutine1)
End Function

Public Sub AfterUDFRoutine1()
  ' Schedule the Application.OnTime timer
  mApplicationTimerTime = Now
  Application.OnTime mApplicationTimerTime, "AfterUDFRoutine2"
End Sub

Public Sub AfterUDFRoutine2()
  ' Perform modifications outside the UDF
  '...
End Sub

Mises en garde

Cette solution de contournement n'est pas sans limites. Les UDF qui l'utilisent ne doivent pas être volatiles, transmettre des fonctions volatiles ou référencer des cellules contenant des formules/fonctions volatiles. De plus, les modifications de cellule ne se produiront que lorsque la minuterie se déclenchera dans un environnement sûr (pas de boîte de dialogue ouverte ni d'édition de cellule).

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