Heim > Backend-Entwicklung > C++ > Wie ändere ich Zellen in Excel-UDFs, ohne ein Array zurückzugeben?

Wie ändere ich Zellen in Excel-UDFs, ohne ein Array zurückzugeben?

Mary-Kate Olsen
Freigeben: 2024-11-14 16:59:02
Original
877 Leute haben es durchsucht

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

Excel UDF: Zellen ändern, ohne ein Array zurückzugeben

In Excel geben benutzerdefinierte Funktionen (UDFs) normalerweise Werte oder Arrays zurück. Es gibt jedoch Szenarien, in denen eine UDF andere Zellen ändern muss, ohne ein Array zurückzugeben. Dies kann durch eine komplexe Technik erreicht werden, die Windows-Timer und Application.OnTime-Ereignisse umfasst.

Das Problem:

Stellen Sie sich eine UDF namens New_Years vor, die als Eingabe zwei Jahre benötigt und gibt eine Reihe von Neujahrsdaten zwischen diesen Jahren zurück. Um das Array in Excel zu füllen, muss der Benutzer jedoch manuell Zellen auswählen, die Formel eingeben und Strg-Umschalt-Eingabetaste drücken. Diese Einschränkung verhindert, dass die UDF die Daten automatisch ausfüllt.

Die Lösung:

Trotz der Einschränkung von Excel, dass UDFs Zellen direkt ändern können, gibt es eine Problemumgehung mithilfe von Windows-Timern und -Anwendungen. OnTime Events machen es möglich. Durch Starten eines Windows-Timers aus dem UDF heraus kann ein nachfolgender Application.OnTime-Timer so geplant werden, dass er Aktionen ausführt, die andernfalls in einem UDF verboten wären.

Codebeispiel:

Der folgende Code zeigt, wie diese Technik mithilfe einer Sammlung implementiert wird, um die Referenzen von Zellen zu speichern, in denen die UDF aufgerufen wird. Zwei Timer-Routinen, AfterUDFRoutine1 und AfterUDFRoutine2, werden zur Verarbeitung der Timer-Ereignisse verwendet.

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
Nach dem Login kopieren

Verwendung:

Um diese Technik anzuwenden, muss ein UDF (z. B. AddTwoNumbers ) kann innerhalb eines regulären Moduls erstellt werden. Innerhalb der UDF werden die Timer-Routinen gestartet und die Zellreferenz der aufrufenden Zelle in der Collection gespeichert. Die Timer-Routinen ändern anschließend die erforderlichen Zellen außerhalb des UDF-Bereichs.

Durch die Nutzung von Windows-Timern und Application.OnTime-Ereignissen wird es möglich, UDFs zu erstellen, die Zellen ändern, ohne ein Array zurückzugeben. Diese Technik ermöglicht eine stärkere Automatisierung und macht das manuelle Befüllen des Arrays durch den Benutzer überflüssig.

Das obige ist der detaillierte Inhalt vonWie ändere ich Zellen in Excel-UDFs, ohne ein Array zurückzugeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage