3 Crear carpetas de trabajo
3.6 Trabajar con macros
3.6.17 Uso de rellamadas
Analysis ofrece diversas rellamadas que se ejecutan con determinados eventos. Siempre se ejecuta la rellamada 'Workbook_SAP_Initialize'. El resto de rellamadas que se enumera más abajo se debe registrar con el método API 'SAPExecuteCommand' antes de usarlas por primera vez. Para anular el registro de rellamadas, también puede usar 'SAPExecuteCommand'.
En un libro de trabajo, las rellamadas se pueden registrar solo una vez. Si registra una de las rellamadas una segunda vez, la primera se sobrescribirá.
Nota
La rellamada 'Workbook_SAP_Initialize' debe estar definida en la sección 'ThisWorkbook' del editor VBA. El resto de rellamadas debe estar definido en un módulo. Si se definen en la sección 'ThisWorkbook' o en la de una hoja de trabajo, debe hacer referencia a ellas de forma completa durante el registro. En la sección 'ThisWorkbook', por ejemplo, debe usar ThisWorkbook.<MacroName> como referencia.
Workbook_SAP_Initialize
Use esta rellamada para definir la lógica de inicio de la carpeta de trabajo. Esta rellamada se parece al evento 'Workbook_Open' que Microsoft Office Excel ofrece, pero se ejecuta después del evento de Microsoft Office Excel y después del inicio estándar de Analysis. Si abre una carpeta de trabajo en Microsoft Office Excel y, a
continuación, activa el complemento de Analysis, el evento de Excel se ejecuta al abrir la carpeta de trabajo, y el inicio estándar de Analysis y la rellamada se ejecutan después de la activación de Analysis.
La rellamada se tiene que definir como una subrutina sin parámetros de entrada.
Ejemplo
' defined in ThisWorkbook
Public Sub Workbook_SAP_Initialize() ' register callbacks
Call Application.Run("SAPExecuteCommand", "RegisterCallback", "AfterRedisplay", "Callback_AfterRedisplay")
Call Application.Run("SAPExecuteCommand", "RegisterCallback", "BeforePlanDataSave", "Callback_BeforePlanDataSave")
Call Application.Run("SAPExecuteCommand", "RegisterCallback", "BeforePlanDataReset", "Callback_BeforePlanDataReset")
End Sub
Las rellamadas 'AfterRedisplay', 'BeforPlanDataSave' y 'BeforePlanDataReset' se registran durante el inicio de las carpetas de trabajo y, por lo tanto, se pueden usar en el proyecto de VBA.
AfterRedisplay
Use esta rellamada para definir la lógica que debe ocurrir cada vez que se vuelva a mostrar la carpeta de trabajo. Por ejemplo, puede adaptar automáticamente el formato de la carpeta de trabajo después de cada nueva visualización.
La rellamada se tiene que definir como subrutina sin parámetros de entrada. La rellamada se llama solo si 'Pause Refresh' es false en el nivel del libro de trabajo o el usuario solicita explícitamente 'Actualizar todo'. También se llama solo si se ha modificado el libro de trabajo.
Ejemplo
' defined in a module
Public Sub Callback_AfterRedisplay()
ThisWorkbook.Worksheets("Sheet1").Cells(1, 1).Value = "Last redisplay: " ThisWorkbook.Worksheets("Sheet1").Cells(1, 2).Value = Now()
End Sub
Con esta rellamada, el texto "Last redisplay: " se muestra en la celda A1 de la hoja de trabajo 1, y en la celda A2 se muestran la fecha y la hora de la última visualización. La información se actualiza después de cada nueva actualización.
Ejemplo
Con el código siguiente, puede obtener las tablas de referencias y las fuentes de datos que se han modificado desde la última acción del usuario y se han actualizado en las hojas.
Nota
Estas llamadas solo funcionan con 'Callback_AfterRedisplay'. De lo contrario, devolverán un error. Los objetos justo se han eliminado y no formarán parte de la matriz devuelta.
lResult= Application.Run("SAPGetProperty", "CHANGED_CROSSTABS") Se devuelve una matriz como 'SAPListOf' con nombre técnico, nombre y fuente de datos. lResult= Application.Run("SAPGetProperty", "CHANGED_DATASOURCES") Se devuelve una matriz como 'SAPListOf' con nombre técnico y nombre.
BeforePlanDataSave
Use esta rellamada para definir la lógica que se debe ejecutar cada vez que un usuario guarde datos de planificación. Por ejemplo, puede ejecutar una función de planificación (SAPExecutePlanningFunction).
Las rellamadas se tienen que definir como una función que devuelve un valor booleano sin parámetros de entrada. Si el valor que devuelve la función es falso, el almacenamiento no se ejecutará.
Ejemplo
' defined in a module
Public Function Callback_BeforePlanDataSave() As Boolean Dim lResult As Integer
lResult = Application.Run("SAPExecutePlanningFunction", "PF_1") If lResult <> 1 Then
' planning function execution failed, cancel save
Call MsgBox("Planning Function (PF_1) execution failed. Data will not be saved.", vbCritical, "Error") Callback_BeforePlanDataSave = False Else Callback_BeforePlanDataSave = True End If End Function
Cada vez que un usuario selecciona el botón Guardar para almacenar datos de planificación, se ejecuta la función de planificación PF_1. Si se puede ejecutar la función de planificación, se guardan los datos de planificación. Si se produce un error en la ejecución, aparecerá un cuadro de mensaje con el texto "Planning Function (PF_1) execution failed. Se muestra "Los datos no se guardarán".
BeforePlanDataReset
Use esta rellamada para definir la lógica que se debe ejecutar cada vez que un usuario restablezca los datos de planificación al estado que se hubiera guardado antes. Por ejemplo, puede definir que se le pregunte al usuario si está seguro de que los datos se restablezcan.
Las rellamadas se tienen que definir como una función que devuelve un valor booleano sin parámetros de entrada. Si el valor que devuelve la función es 'falso', el restablecimiento no se ejecutará.
Ejemplo
' defined in a module
Public Function Callback_BeforePlanDataReset() As Boolean Dim lAnswer As VbMsgBoxResult
lAnswer = MsgBox("Do you really want to reset planning data?", vbYesNo, "Reset") If lAnswer = vbYes Then
Callback_BeforePlanDataReset = True Else
Callback_BeforePlanDataReset = False End If
End Function
Cada vez que un usuario introduzca datos de planificación y seleccione Atrás Al estado guardado anteriormente , aparecerá un cuadro de mensaje con el texto "¿Realmente desea reinicializar datos de planificación?" Si el usuario selecciona 'Sí', los datos introducidos se restablecen al estado guardado anteriormente. Si el usuario selecciona 'No', no se ejecuta el restablecimiento.
Información relacionada
SAPExecuteCommand [página 65]
SAPExecutePlanningFunction [página 70]