Financial Management Blogs by Members
Dive into a treasure trove of SAP financial management wisdom shared by a vibrant community of bloggers. Submit a blog post of your own to share knowledge.
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member


Hi

Since our bread and butter for the BPC is based on Excel, it seems safe to say that we should be taking advantage of the inherit excel functionality to improve BPC performance and user interaction.

I am writing this document to explain the some of the basic VBA code that can use used to assist us while building reports and forms.

To start off, so that we are all on the same page - to open the VBA code window - you have two ways (at least that is what I am aware off). The first way is using the Excel menu > Developer tab > view code and the other way (my favorite) is using hot-key "ALT+F11".

To add the developer tab to your excel menu, please follow the below steps.

Step 1:
Right click on the menu and click on "Customize the ribbon".

Step 2:

Check the box next to "Developer" and click on "Ok".

You can do a lot more in the developer tab then just going to the "View Code" window, but I am not going to into that in this document.

Now in the VBA code window, you will notice that there are several windows / panes open. The two panes that we are interested are (1) Project Explorer and (2) the code window. If you do not see these panes / windows open, you can add them by going to "VIEW > Project Explorer (shortcut is CTRL+R)" and "VIEW > Code (shortcut is F7)".

The left window is the "project explorer" and the right window is the "code window". The left drop-downs in the code window will be used to select the object and the right drop-down will be used to select the event / trigger for that object.

For our purposes, we are going to be adding a Module to the our workbook. You can do that by right clicking on the "VBAProject (Book1)" and navigating through Insert > Module.

The various functions that I have used over the past years have been listed below with their explanations

Public Function AFTER_WORKBOOK_OPEN()

End Function

This is the first code that will be called after the workbook has been opened. You can insert any code that you need to be executed just after the workbook is opened. Please note that if you had set the "Refresh Data in the whole file when opening it" in the sheet options, that will take happen before this code can be executed.

Public Function BEFORE_SAVE() As Boolean

    If variable then

          BEFORE_SAVE = True

    else

          Msgbox "Please use button to save"

          BEFORE_SAVE = False

    End if

End Function


This code will be called every time, EPM attends to send data back to BPC for saving. You can insert code here if you need to perform any validation before the data is sent or you can restrict the user from clicking on the "Save Data" in the EPM tab - similar to the example. I will also show the functions that I used to call the save and refresh at the bottom of this documentation.


Public Function BEFORE_REFRESH() as Boolean


    If variable then

          BEFORE_REFRESH = True

    Else

          Msgbox "Please use button"

          BEFORE_REFRESH = False

    End if


End Function


This code will be called every time, EPM attends to refresh the report or form. You can insert code here if you need to perform any action before EPM refreshes the sheet or you can restrict the user from clicking on the "Refresh" in the EPM tab - similar to the example. I will also show the functions that I used to call the save and refresh at the bottom of this documentation.

Public Function AFTER_REFRESH() as Boolean

    AFTER_REFRESH = True

End Function

This code is called after the refresh has occurred. You can insert the code to perform any action or call to another function within the function definition.

As promised, the two functions that I have created to save and refresh my workbook are as follows

Public Sub MySave()

    blnMySave = True

    EPM.SaveAndRefreshWorksheetData

      blnMySave = False

    'MsgBox "Saved"

End Sub



Public Sub MyRefresh()

    blnMyRef = True

    EPM.Refresh

    blnMyRef = False

    'MsgBox "Refreshed"

End Sub

Please note that I have defined 1 object (EPM) at the top of the module.

Dim EPM As New FPMXLClient.EPMAddInAutomation


I hope this document was helpful.


Thanks,


Ranjeet

Top kudoed authors