Check SAP add-in
Option Explicit
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Dim iFlag As Integer
Public Sub CheckSAPAddIN_BWInterface(ByRef iFlag As Integer)
Dim addin As COMAddIn
' Run loop for each Add-In in 'COM Add-Ins'
' If Addin is related to BW SAP, display Analysis tab
For Each addin In Application.COMAddIns
If addin.progID = "SapExcelAddIn" Then
If addin.Connect = False Then
iFlag = 1
End If
End If
Next
End Sub
Code explanation:
यह VBA (Visual Basic for Applications) code खास तौर पर Microsoft Excel में SAP BW (Business Warehouse) Add-In की स्थिति (Status) check करने के लिए बनाया गया है। यह code यह बताता है कि SAP Excel Add-In (SapExcelAddIn) Excel में जुड़ा हुआ है या नहीं।
Code की शुरुआत Option Explicit से होती है, जो सभी variables को पहले declare करना अनिवार्य बनाता है। इससे code ज्यादा सही और error-free बनता है।
Sleep function kernel32 library से लिया गया है, जिससे code को कुछ समय के लिए रोका जा सकता है (हालाँकि इस subroutine में इसका उपयोग नहीं हुआ है)।
CheckSAPAddIN_BWInterface नाम का Sub Excel में मौजूद सभी COM Add-Ins को loop में check करता है। Application.COMAddIns के माध्यम से Excel के हर Add-In को पढ़ा जाता है।
जब progID "SapExcelAddIn" से match करता है, तब यह check किया जाता है कि Add-In connected है या नहीं।
अगर SAP BW Add-In disconnected पाया जाता है, तो iFlag की value 1 set कर दी जाती है। यह flag आगे चलकर user को message दिखाने, auto-connect करने या SAP report run करने से पहले validation के लिए इस्तेमाल किया जा सकता है।
यह code SAP Analytics, SAP BW Reporting, Excel Automation और VBA SAP Integration के लिए बहुत उपयोगी है और SAP users के लिए एक smart checking mechanism प्रदान करता है।
Activate SAP add-in
Sub ActivateAddIN_BWInterface()
Dim lResult As Long
Dim addin As COMAddIn
For Each addin In Application.COMAddIns
If addin.progID = "SapExcelAddIn" Then
If addin.Connect = False Then
addin.Connect = True
End If
End If
Next
End Sub
Code explanation:
यह VBA (Visual Basic for Applications) code Microsoft Excel में SAP BW Excel Add-In (SapExcelAddIn) को automatic तरीके से active (Enable) करने के लिए इस्तेमाल किया जाता है। यह code खास तौर पर उन users के लिए उपयोगी है जो SAP BW Reports, SAP Analysis for Office और Excel-SAP Integration पर काम करते हैं।
ActivateAddIN_BWInterface नाम का यह Sub Excel में उपलब्ध सभी COM Add-Ins को एक-एक करके check करता है। इसके लिए Application.COMAddIns collection का उपयोग किया गया है।
हर Add-In का progID check किया जाता है और जब यह "SapExcelAddIn" से match करता है, तब code आगे की प्रक्रिया करता है।
अगर SAP Excel Add-In पहले से Disable या Disconnect स्थिति में होता है (addin.Connect = False), तो यह code उसे True set करके active कर देता है। इससे users को manually जाकर File → Options → COM Add-Ins में Add-In को Enable करने की ज़रूरत नहीं रहती।
यह VBA code खास तौर पर तब बहुत काम आता है जब Excel खोलते समय SAP Add-In अपने आप load नहीं होता या बार-बार disable हो जाता है।
इससे SAP BW data access, report run करना, और Analysis tab दिखाना आसान हो जाता है।
कुल मिलाकर, यह code Excel Automation, SAP BW Add-In Activation, और Productivity बढ़ाने के लिए एक simple और असरदार समाधान है।
Deactivate SAP add-in
Sub DeActivateAddIN_BWInterface()
Dim lResult As Long
Dim addin As COMAddIn
For Each addin In Application.COMAddIns
If addin.progID = "SapExcelAddIn" Then
If addin.Connect = True Then
addin.Connect = False
End If
End If
Next
End Sub
Code explanation:
यह VBA (Visual Basic for Applications) code Microsoft Excel में SAP BW Excel Add-In (SapExcelAddIn) को automatic तरीके से Deactivate / Disable करने के लिए इस्तेमाल किया जाता है। यह code उन स्थितियों में बहुत उपयोगी है जहाँ SAP Add-In को अस्थायी रूप से बंद करना ज़रूरी हो, जैसे performance issue, Excel hang होना या normal Excel file पर काम करना।
DeActivateAddIN_BWInterface नाम का यह Sub Excel में मौजूद सभी COM Add-Ins को एक-एक करके scan करता है। इसके लिए Application.COMAddIns collection का उपयोग किया गया है, जिससे Excel के सभी register किए गए Add-Ins की जानकारी मिलती है।
जब किसी Add-In का progID "SapExcelAddIn" से match करता है, तब code यह check करता है कि वह Add-In अभी Active (Connected) है या नहीं।
अगर addin.Connect = True होता है, तो code उसे False set कर देता है, जिससे SAP BW Add-In तुरंत Disable हो जाता है।
इस VBA automation से user को manually File → Options → COM Add-Ins में जाकर Add-In बंद करने की जरूरत नहीं रहती।
यह code खास तौर पर SAP BW Reporting, Excel Performance Optimization, और SAP Analysis Troubleshooting में मदद करता है।
कुल मिलाकर, यह एक Simple, Safe और Effective VBA Solution है जो Excel और SAP BW के बीच control और flexibility बढ़ाता है।
Refreshing BO queries for entire workbook
Public Sub RefreshBO()
'######################################################################################################
' Refreshing BO Queries for Entire Workbook
'######################################################################################################
Dim wsBO As Worksheet, wsInput As Worksheet
'Checking and Activating SAP AddIns
Call CheckSAPAddIN_BWInterface(iFlag)
If iFlag = 1 Then
Call ActivateAddIN_BWInterface
End If
iFlag = 0
Set wsInput = Sheet14 'Input
Set wsBO = Sheet5 'BO Query
End With
Application.StatusBar = "Refreshing BO..."
Dim Key_Date_DS_1 As String, GL_Account_DS_1 As String, Company_Code_DS_1 As String, Posting_Date_DS_1 As String
Dim iRet As Long 'Variable for error code
' If Error are there, display message
iRet = Application.Run("SAPLogon", "DS_1", "800", "", "")
MsgBox "Logon failure, Please check username or password", vbOKOnly, "Error"
iFlag = 1
Exit Sub
Else
Else
'iRet = Application.Run("SAPExecuteCommand", "Refresh")
'wsBO.Calculate
'Initialize data for different filters in BO query
'Initialize data for different filters in BO query
With wsInput
'DS_1
Key_Date_DS_1 = .Range("E6") '"29.03.2023" 'Key Date
Company_Code_DS_1 = "" '.Range("E7") '"2800" 'Company Code
Posting_Date_DS_1 = .Range("E9") & " - " & .Range("G9") '"01.01.2023 - 31.12.2023" 'Posting Date
GL_Account_DS_1 = .Range("XEZ3") ' 'GL Account
End With
' Define position from where data would be displayed in tab 'BW Data'
With wsBO
.Activate
.Range("A3").Select
' The command will run sucessfully if value 'iRET' returns 1
Application.StatusBar = "DS_1"
iRet = Application.Run("SAPExecuteCommand", "Refresh", "DS_1")
Call Application.Run("SAPSetRefreshBehaviour", "Off")
Call Application.Run("SAPExecuteCommand", "PauseVariableSubmit", "On")
iRet = Application.Run("SAPSetVariable", "V_KEYDAT", Key_Date_DS_1, "INPUT_STRING", "DS_1")
iRet = Application.Run("SAPSetVariable", "V_GLACCOUNT", GL_Account_DS_1, "INPUT_STRING", "DS_1")
iRet = Application.Run("SAPSetVariable", "AUT01_OM", Company_Code_DS_1, "INPUT_STRING", "DS_1")
iRet = Application.Run("SAPSetVariable", "V_POSTDAT", Posting_Date_DS_1, "INPUT_STRING", "DS_1")
Call Application.Run("SAPExecuteCommand", "PauseVariableSubmit", "Off")
' filter 1
iRet = Application.Run("SAPSetFilter", "DS_1", "0COMP_CODE", "!2017; !2402; !2458; !2502; !2772; !2773; !2820; !2199", "INPUT_STRING")
' filter 2
iRet = Application.Run("SAPSetFilter", "DS_1", "0SOLD_TO__CCUNAME", CU, "INPUT_STRING")
' filter 3
' filter 3
iRet = Application.Run("SAPSetFilter", "DS_1", "0COORDER__CHROPORG", "+" & "31526103" & "(CHRORG)")
Call Application.Run("SAPSetRefreshBehaviour", "On")
End With
Set wsInput = Nothing
Set wb = Nothing
Dim wb As Workbook
'ReValuing variable to 0
Set wb = ThisWorkbook
With wb
'xlWkstPivotPeriod.Activate
'DS_1 Initialization
' Set Logon interface to the application
If Val(iRet) <> 1 Then
'Else refresh the BO data
End If
If iFlag = 0 Then
Application.Calculation = xlCalculationManual
' Unhide sheet 'BW Data'
' Set filter prompts for DS_1 (data source)
' ************************************ apply filter *************************************************
wb.Save
End If
Set wsBO = Nothing
End Sub
Code explanation:
यह VBA (Visual Basic for Applications) code Microsoft Excel से SAP BO / SAP BW Query को automatic तरीके से Refresh करने के लिए बनाया गया है। यह code खास तौर पर SAP Analysis for Office, SAP BW Reporting, और Excel Automation में काम करने वाले users के लिए बहुत उपयोगी है।
RefreshBO नाम का यह Sub पूरे Workbook के SAP BO Queries को controlled और step-by-step तरीके से refresh करता है। Code की शुरुआत में सबसे पहले यह check किया जाता है कि SAP Excel Add-In (SapExcelAddIn) active है या नहीं। अगर Add-In बंद होता है, तो उसे automatic तरीके से Activate कर दिया जाता है, जिससे SAP से connection में कोई दिक्कत न आए।
इसके बाद Workbook और जरूरी Worksheets को set किया जाता है, जैसे Input Sheet (जहाँ user filter value डालता है) और BO Query Sheet (जहाँ SAP data आता है)।
Application.StatusBar के जरिए user को refresh process की live जानकारी भी मिलती रहती है।
फिर code SAPLogon command के माध्यम से SAP system में log-in करता है। अगर log-in fail हो जाता है, तो user को Error Message दिखाया जाता है और process वहीं रुक जाता है। सफल log-in होने पर आगे की प्रक्रिया शुरू होती है।
इसके बाद Input Sheet से Key Date, Posting Date, Company Code और GL Account जैसी value पढ़ी जाती हैं। ये वैल्यू SAP BW Query के Variables के रूप में इस्तेमाल होती हैं।
Performance बेहतर करने के लिए Excel की Calculation को Manual कर दिया जाता है।
BO Query Sheet पर जाकर SAPExecuteCommand के जरिए DS_1 Data Source को refresh किया जाता है।
SAPSetVariable command से SAP BW Variables जैसे V_KEYDAT, V_GLACCOUNT, V_POSTDAT set किए जाते हैं।
इसके बाद अलग-अलग SAP Filters लगाए जाते हैं, जैसे Company Code को Exclude करना, Customer Filter और Organizational Filter।
सभी variables और filters set होने के बाद Refresh Behaviour को फिर से On किया जाता है और Workbook को Save कर दिया जाता है।
कुल मिलाकर, यह VBA code SAP BO Query Automation, Error-Free SAP Refresh, Time Saving, और Manual Effort कम करने के लिए एक बहुत ही powerful समाधान है। यह SAP BW और Excel के बीच एक smart और professional integration प्रदान करता है।
