【问题标题】:VBA API for SAP BO Analysis for Excel适用于 Excel 的 SAP BO 分析的 VBA API
【发布时间】:2015-08-13 12:14:57
【问题描述】:

我还没有在 stackoverflow 上找到很多关于此的文章,所以我将通过提供必要的背景信息来详细说明。

我正在使用 SAP BO Analysis for Excel 加载项,通过它我从 SAP BW 中检索 Excel 中的数据。

Analysis 插件附带一个 GUI,您可以通过它在查询中输入变量(所谓的提示)。

它还具有 VBA API,因此您可以通过 VBA 设置变量。

我的大问题是只有当我通过 GUI 设置了至少 1 个提示时,通过 VBA 设置变量似乎才有效:S

以下是我的完整 VBA 代码。它的灵感来自 http://precisionstudio.net/uploads/3/0/5/0/3050843/sap_instructorhandbook.pdfhttp://scn.sap.com/community/businessobjects-analysis-ms-office/blog/2011/06/26/can-you-use-vba-with-businessobjects-analysis-find-out-here

Dims lResul、lResult 和 lResultt 返回 0,但是当我在 GUI 提示符中手动填写一个值并重新运行 VBA 宏时,它可以工作(返回 1)...填写其他值。很奇怪。

有人遇到过同样的问题并知道出路吗?

在此先感谢

  Private Sub EnableAnalysisOffice()

    Dim addin As COMAddIn

    For Each addin In Application.COMAddIns

        If addin.progID = "SBOP.AdvancedAnalysis.Addin.1" Then

            If addin.Connect = False Then addin.Connect = True

        End If

    Next

End Sub


Private Sub Workbook_Open()

    Call EnableAnalysisOffice
    Call MyGetData

End Sub


Public Sub MyGetData()

    Dim Iret As Long

    Dim lResul As Long

    Dim lResult As Long

    Dim lResultt As Long

    Iret = Application.Run("SAPLogon", "DS_1", "200", "myUser", "myPassword")

    MsgBox (Iret)

    Call Application.Run("SAPSetRefreshBehaviour", "Off")
    Call Application.Run("SAPExecuteCommand", "PauseVariableSubmit", "On")

    'Select data based on WBS

    'lResul = Application.Run("SAPSetVariable", "0S_WBSE", Worksheets("Prompt Values").Range("A2").Value, "INPUT_STRING", "DS_1")
    'MsgBox (lResul)

    'Select data based on Employees

    lResult = Application.Run("SAPSetVariable", "YEMPLSEL", Worksheets("Prompt Values").Range("A5").Value, "INPUT_STRING", "DS_1")
    MsgBox (lResult)

    'Document Date
    lResultt = Application.Run("SAPSetVariable", "YDOCUMENT_DATE", ">=01\-01\-2015", "INPUT_STRING", "DS_1")
    MsgBox (lResultt)

    Call Application.Run("SAPExecuteCommand", "PauseVariableSubmit", "Off")

    Call Application.Run("SAPSetRefreshBehaviour", "On")

    'Call Application.Run("SAPExecuteCommand", "Refresh")

End Sub

【问题讨论】:

  • 不是每个由商业软件包创建的 Excel-Add in 都附带说明如何使用它以及它的限制是什么(特别是您使用的是 SAP)的文档吗?
  • 手动运行一次 GUI 后,在退出 Excel 之前,VBA 是否始终工作?如果是这样,可能加载项的某些部分(库等)不会通过调用 addin.Connect = True 加载
  • 我在此期间找到了一个解决方案,并不是一个很好的解决方案。我将当前提示保存在工作簿中并使用这些提示进行刷新。之后,我允许我修改提示。只是分享以防有人遇到同样的问题...
  • 我建议向 SAP 提出有关此问题的票证/事件,他们可以考虑并修复它或将其作为未来版本的增强请求。

标签: vba api business-objects


【解决方案1】:

回答可能为时已晚... 我读了一篇名为“SAP BI Analysis for MS Excel 中 VBA 的最佳实践”的文章。 (我没有链接它,因为我不知道它是否允许)。

基本上,它说我们应该在使用 SAPSetVariable 之前刷新。 我在 SAPSetVariable 之前添加了以下代码,它对我有用。

lResult = Application.Run("SAPGetProperty", "IsDataSourceActive", "DS_1")

If lResult = False Then
    lResult = Application.Run("SAPExecuteCommand", "Refresh", "DS_1")
End If

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-31
    • 2022-11-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    相关资源
    最近更新 更多