Création d'une FDU qui modifie d'autres cellules sans renvoyer de tableau
Vous disposez d'un complément Excel avec une fonction appelée New_Years qui renvoie actuellement un tableau de jours du Nouvel An entre deux années spécifiées. Cependant, cela nécessite que vous sélectionniez plusieurs cellules et que vous utilisiez Ctrl Shift Enter pour créer le tableau.
Est-il possible d'éviter la création d'un tableau ?
Oui, c'est possible pour modifier d'autres cellules directement à partir d'une UDF sans renvoyer de tableau. Bien qu'Excel interdise aux UDF d'apporter des modifications aux propriétés des cellules, il existe une solution complexe qui implique l'utilisation d'une combinaison de minuteries Windows et de minuteries Application.OnTime.
Présentation de la solution
Implémentation du code
Le code suivant doit être placé dans un module régulier :
Private Declare Function SetTimer Lib "user32" ( _ ByVal HWnd As Long, _ ByVal nIDEvent As Long, _ ByVal uElapse As Long, _ ByVal lpTimerFunc As Long _ ) As Long Private Declare Function KillTimer Lib "user32" ( _ ByVal HWnd As Long, _ ByVal nIDEvent As Long _ ) As Long Private mCalculatedCells As Collection Private mWindowsTimerID As Long Private mApplicationTimerTime As Date Public Function AddTwoNumbers( _ ByVal Value1 As Double, _ ByVal Value2 As Double _ ) As Double AddTwoNumbers = Value1 + Value2 ' Cache the caller's reference for later use in a non-UDF routine If mCalculatedCells Is Nothing Then Set mCalculatedCells = New Collection On Error Resume Next mCalculatedCells.Add Application.Caller, Application.Caller.Address On Error GoTo 0 ' Set the Windows timer If mWindowsTimerID <> 0 Then KillTimer 0&, mWindowsTimerID mWindowsTimerID = SetTimer(0&, 0&, 1, AddressOf AfterUDFRoutine1) End Function
Routines de minuterie
Deux routines de minuterie sont définies : AfterUDFRoutine1 et AfterUDFRoutine2. Ils gèrent la planification et l'exécution du code en dehors de l'UDF.
Exemple d'utilisation
Dans votre feuille de calcul Excel, saisissez la fonction AddTwoNumbers dans une cellule : =AddTwoNumbers(A1, B1)
Cela lancera le processus de minuterie.
Remarques importantes
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!