tratamiento subir soluciones soban sobada seƱoras que para mujeres matriz jovenes imagen curar como caida acomodar c++ arrays excel add-in excel-addins

c++ - subir - matriz caida tratamiento



No quiero que mi complemento de Excel devuelva una matriz(en su lugar, necesito una UDF para cambiar otras celdas) (1)

New_Years un complemento de Excel y una de las funciones de este complemento, digamos que New_Years lleva actualmente 2 años y New_Years todos los días de Año Nuevo entre esos 2 años como una matriz en Excel. Así que New_Years(2000,2002) regresaría el 1 de enero de 2000, el 1 de enero de 2001 y el 1 de enero de 2002 en la última celda.

El problema es que tengo que saber que van a haber 3 fechas en ese momento, seleccionar 3 celdas, ingresar mi fórmula en la celda superior, y luego presionar Ctrl + Shift + Enter para completar la matriz.

Uso XLW versión 5 para convertir mi código C ++ a un archivo .xll. Realmente me gustaría que hubiera alguna manera de llenar una sola casilla con mi fórmula, y Excel llenaría los cuadrados a continuación según sea necesario con las fechas apropiadas. ¿Alguien sabe si esto es posible? O imposible?

¡Muchas gracias!


En realidad es posible aunque complejo. Estoy volviendo a publicar esta pieza de magia de Kevin Jones, alias Zorvek, ya que se encuentra detrás de EE Paywall (enlace adjunto si alguien tiene acceso)

Aunque Excel prohíbe estrictamente que un UDF cambie cualquier celda, hoja de cálculo o propiedades del libro de trabajo, hay una forma de efectuar dichos cambios cuando se llama a una UDF utilizando un temporizador de Windows y un temporizador Application.OnTime en secuencia. El temporizador de Windows debe utilizarse dentro de la UDF porque Excel ignora cualquier llamada Application.OnTime dentro de una UDF. Pero, debido a que el temporizador de Windows tiene limitaciones (Excel se cerrará instantáneamente si un temporizador de Windows intenta ejecutar código VBA si se está editando una celda o si se abre un diálogo), se usa solo para programar un temporizador Application.OnTime, un temporizador seguro que Excel solo permite que se active si una celda no se está editando y no hay diálogos abiertos.

El siguiente código de ejemplo ilustra cómo iniciar un temporizador de Windows desde dentro de una UDF, cómo usar esa rutina de temporizador para iniciar un temporizador Application.OnTime y cómo pasar información conocida solo para la UDF a rutinas posteriores ejecutadas por temporizador. El código a continuación debe colocarse en un módulo regular.

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 '' This is a UDF that returns the sum of two numbers and starts a windows timer '' that starts a second Appliction.OnTime timer that performs activities not '' allowed in a UDF. Do not make this UDF volatile, pass any volatile functions '' to it, or pass any cells containing volatile formulas/functions or '' uncontrolled looping will start. AddTwoNumbers = Value1 + Value2 '' Cache the caller''s reference so it can be dealt with 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 '' Setting/resetting the timer should be the last action taken in the UDF If mWindowsTimerID <> 0 Then KillTimer 0&, mWindowsTimerID mWindowsTimerID = SetTimer(0&, 0&, 1, AddressOf AfterUDFRoutine1) End Function Public Sub AfterUDFRoutine1() '' This is the first of two timer routines. This one is called by the Windows '' timer. Since a Windows timer cannot run code if a cell is being edited or a '' dialog is open this routine schedules a second safe timer using '' Application.OnTime which is ignored in a UDF. '' Stop the Windows timer On Error Resume Next KillTimer 0&, mWindowsTimerID On Error GoTo 0 mWindowsTimerID = 0 '' Cancel any previous OnTime timers If mApplicationTimerTime <> 0 Then On Error Resume Next Application.OnTime mApplicationTimerTime, "AfterUDFRoutine2", , False On Error GoTo 0 End If '' Schedule timer mApplicationTimerTime = Now Application.OnTime mApplicationTimerTime, "AfterUDFRoutine2" End Sub Public Sub AfterUDFRoutine2() '' This is the second of two timer routines. Because this timer routine is '' triggered by Application.OnTime it is safe, i.e., Excel will not allow the '' timer to fire unless the environment is safe (no open model dialogs or cell '' being edited). Dim Cell As Range '' Do tasks not allowed in a UDF... Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Do While mCalculatedCells.Count > 0 Set Cell = mCalculatedCells(1) mCalculatedCells.Remove 1 Cell.Offset(0, 1).Value = Cell.Value Loop Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub