Forum Discussion

IcaroGillead's avatar
IcaroGillead
Copper Contributor
Jun 03, 2024

Automate prompt analysis update through VBA

I am trying to update the prompts in Analysis - which I do currently manually every month - for Excel; however, despite I am getting the value from technical name (which I guess is correct though), I can't change it with the code bellow:

 

Public currentDateRange As String
Public expectedDateRange As String

Sub GetInfoFROMVariables()
    Dim msg As String

    currentDateRange = Application.Run("SAPGetVariable", "DS_1", "ZCALMDEF")
    
    '****Here the MsgBox currentDateRange retrieves the current value for ZCALMDEF, which is "2024/06 - 2024/11".
    MsgBox currentDateRange
    
    expectedDateRange = GetNextMonthYear() & " - " & GetFutureMonthYear(6)
    MsgBox expectedDateRange
               
End Sub

Function GetNextMonthYear() As String
    Dim startMonth As Date
    startMonth = DateAdd("m", 1, Date)
    GetNextMonthYear = Format(startMonth, "yyyy/mm")
End Function
Function GetFutureMonthYear(monthsAhead As Integer) As String
    Dim futureDate As Date
    futureDate = DateAdd("m", monthsAhead, Date)
    GetFutureMonthYear = Format(futureDate, "yyyy/mm")
End Function

Sub AtualizarPROMPTAnalysis()  
    Call GetInfoFROMVariables
    
    If currentDateRange <> expectedDateRange Then
        
        Application.ScreenUpdating = False
        
        '*****Here it does not work, neither the ARRAY or the expectedDateRange commands.
        'Application.Run "SAPSetVariable", "DS_1", "ZCALMDEF", Array(GetNextMonthYear(), GetFutureMonthYear(7))
        Application.Run "SAPSetVariable", "DS_1", "ZCALMDEF", expectedDateRange
        
        Application.ScreenUpdating = False
    
        RefreshAll = Application.Run("SAPExecuteCommand", "Refresh")
    
        Application.ScreenUpdating = True
        
        'Here it shows normally what is expected "2024/07 - 2024/12"
        MsgBox expectedDateRange
        
    End If

'
End Sub

 

Technical name is checked, also I know it is ok because I retrieved this value with MsgBox currentDateValue normally.

Thank you very much for your kindly attention and sharing your knowledge.

  • NikolinoDE's avatar
    NikolinoDE
    Gold Contributor

    IcaroGillead 

    Automating prompt updates in SAP Analysis for Excel using VBA can be tricky due to the nature of the interaction between VBA and the SAP BEx Analyzer. Here are some tips and code adjustments to help you address the issue:

    1. Ensure that the SAP Analysis Office add-in is properly referenced: Make sure you have the correct references set in the VBA editor. Go to Tools -> References and ensure that the SAP BusinessObjects Analysis Office library is checked.
    2. Check the format of the date range string: Verify that the format of the expectedDateRange string is correct and matches what SAP expects.
    3. Use the correct variable names and formats: Double-check the technical names and formats for the variables you are trying to set. SAP can be very particular about these.

    Here is an updated version of your code with some modifications and additional comments to help troubleshoot and potentially resolve the issue:

    Vba Code is untested.

    Public currentDateRange As String
    Public expectedDateRange As String
    
    Sub GetInfoFROMVariables()
        Dim msg As String
    
        ' Retrieve the current date range for the variable ZCALMDEF
        currentDateRange = Application.Run("SAPGetVariable", "DS_1", "ZCALMDEF")
        
        ' Display the current value for ZCALMDEF
        MsgBox "Current Date Range: " & currentDateRange
        
        ' Calculate the expected date range
        expectedDateRange = GetNextMonthYear() & " - " & GetFutureMonthYear(6)
        MsgBox "Expected Date Range: " & expectedDateRange
    End Sub
    
    Function GetNextMonthYear() As String
        Dim startMonth As Date
        startMonth = DateAdd("m", 1, Date)
        GetNextMonthYear = Format(startMonth, "yyyy/mm")
    End Function
    
    Function GetFutureMonthYear(monthsAhead As Integer) As String
        Dim futureDate As Date
        futureDate = DateAdd("m", monthsAhead, Date)
        GetFutureMonthYear = Format(futureDate, "yyyy/mm")
    End Function
    
    Sub AtualizarPROMPTAnalysis()  
        ' Retrieve current and expected date ranges
        Call GetInfoFROMVariables
        
        ' Check if the current date range needs to be updated
        If currentDateRange <> expectedDateRange Then
            
            Application.ScreenUpdating = False
            
            ' Attempt to set the new date range for the variable ZCALMDEF
            ' Using Array() in case SAP expects an array input
            Application.Run "SAPSetVariable", "DS_1", "ZCALMDEF", Array(GetNextMonthYear(), GetFutureMonthYear(6))
            ' Alternative: Application.Run "SAPSetVariable", "DS_1", "ZCALMDEF", expectedDateRange
            
            Application.ScreenUpdating = True
            
            ' Refresh the data source to apply the changes
            RefreshAll = Application.Run("SAPExecuteCommand", "Refresh")
            
            ' Display the updated expected date range
            MsgBox "Updated Date Range: " & expectedDateRange
            
        Else
            MsgBox "Date range is already up to date."
        End If
    End Sub

    Troubleshooting Tips:

    1. Manual Test: Manually run the SAPSetVariable command from the SAP Analysis Office to verify if the variable can be set without issues.
    2. Format Validation: Ensure that the date range format is exactly what SAP expects. Sometimes slight variations can cause the command to fail.
    3. Logging: Add more MsgBox statements or use Debug.Print to log values at different steps to ensure variables are being set correctly.
    4. Array Usage: Ensure the Array usage is correct as sometimes SAP expects the input in a specific format.

    If the issue persists, it might be helpful to consult the SAP Analysis Office documentation or support resources to ensure all the requirements for using SAPSetVariable are met.

    Note: My knowledge of the topic is limited, but since no one has answered yet, even though it has been read many times, I posted the question in various AIs and found the above suggested solution for you. The proposed solution is untested.

     

    My answers are voluntary and without guarantee!

     

    Hope this will help you.

    Was the answer useful? Mark as best response and Like it!

    This will help all forum participants.

Resources