Maison >développement back-end >C++ >Les UDF Excel peuvent-elles modifier des cellules sans renvoyer de tableaux ?
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!