Rumah > pembangunan bahagian belakang > C++ > Bolehkah Anda Mengubah Suai Sel daripada UDF Tanpa Mengembalikan Tatasusunan dalam Excel?

Bolehkah Anda Mengubah Suai Sel daripada UDF Tanpa Mengembalikan Tatasusunan dalam Excel?

Mary-Kate Olsen
Lepaskan: 2024-11-16 18:05:05
asal
370 orang telah melayarinya

Can You Modify Cells from a UDF Without Returning an Array in Excel?

Mencipta UDF yang Mengubah Suai Sel Lain tanpa Mengembalikan Tatasusunan

Anda mempunyai Tambahan Excel dengan fungsi yang dipanggil New_Years yang kini kembali susunan hari Tahun Baru antara dua tahun yang ditentukan. Walau bagaimanapun, ini memerlukan anda memilih berbilang sel dan menggunakan Ctrl Shift Enter untuk mencipta tatasusunan.

Adakah Kemungkinan untuk Mengelak Penciptaan Tatasusunan?

Ya, mungkin untuk mengubah suai sel lain secara langsung daripada UDF tanpa mengembalikan tatasusunan. Walaupun Excel melarang UDF daripada membuat sebarang perubahan pada sifat sel, terdapat penyelesaian kompleks yang melibatkan penggunaan gabungan pemasa Windows dan Application.OnTime timer.

Gambaran Keseluruhan Penyelesaian

  1. Buat pemasa Windows dalam UDF.
  2. Pemasa Windows menjadualkan Application.OnTime timer.
  3. Application.OnTime timer dengan selamat melaksanakan kod di luar UDF.

Pelaksanaan Kod

Kod berikut mesti diletakkan dalam modul biasa:

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
Salin selepas log masuk

Rutin Pemasa

Dua rutin pemasa ditakrifkan: AfterUDFRoutine1 dan AfterUDFRoutine2. Mereka mengendalikan penjadualan dan pelaksanaan kod di luar UDF.

Contoh Penggunaan

Dalam lembaran kerja Excel anda, masukkan fungsi AddTwoNumbers dalam sel: =AddTwoNumbers(A1, B1)

Ini akan memulakan proses pemasa.

Nota Penting

  • Jangan jadikan UDF meruap atau melepasi fungsi/sel yang meruap untuk mengelakkan gelung tidak terkawal.
  • Penyelesaian adalah kompleks dan mungkin tidak sesuai untuk semua aplikasi.

Atas ialah kandungan terperinci Bolehkah Anda Mengubah Suai Sel daripada UDF Tanpa Mengembalikan Tatasusunan dalam Excel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan