Automate prompt analysis update through VBA

Copper Contributor

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.

1 Reply

@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.