Обновление данных с помощью VBA и VB Script в Smart View for Oracle - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть файл Excel (Get_Hyperion_Data.xlsm) с несколькими рабочими листами, каждый из которых содержит отчет о гиперионах, где данные извлекаются с использованием функции "HsGetValue ()".

Я создал макрос, которыйпозволяет мне указать две переменные (год и сценарий) и обновить каждый лист после обновления указанных переменных.Если я открою этот файл Excel, укажу переменные и запусту макрос, весь отчет обновится без проблем, как и ожидалось.Я предоставил код для макроса ниже

Я хотел пойти на шаг дальше с точки зрения автоматизации и создать VB-скрипт, который бы открывал Get_Hyperion_Data.xlsm, определял переменные и вызывал макрос обновления.

Что-то странное происходит, когда я пытаюсь запустить макрос через VB Script.Я получаю сообщение об ошибке

"Essbase Error: Member [Scenario] неуместен".

Это странно, учитывая, что я не получаю никаких ошибок, когдасам открываю Excel и запускаю макрос.Только когда я пытаюсь сделать все через VB Script, я получаю это сообщение.

Вот простой скрипт, который я запускаю:

' Refresh_Hyperion_Reports.vbs
' Open Hyperion report and launch macro to refresh values
' ------------------------------------------------'


Option Explicit



  Dim xlApp

  Dim xlBook

  Dim colArgs

  Dim argLocation, argYear, argScenario, argUser, argPassword, argConnection


  Set colArgs = WScript.Arguments.Named


  argLocation = Cstr(colArgs.Item("location"))

  argYear = Cstr(colArgs.Item("year"))

  argScenario = Cstr(colArgs.Item("scenario"))

  argUser = Cstr(colArgs.Item("user"))

  argConnection = Cstr(colArgs.Item("connection"))


  Set xlApp = CreateObject("Excel.Application")

  xlApp.Visible = True

  xlApp.DisplayAlerts = True

  Set xlBook = xlApp.Workbooks.Open(argLocation, 0, False) 


  xlApp.Run "call_RefreshReports", argYear, argScenario, argUser, argPassword, argConnection


  xlBook.Save

  xlApp.ActiveWorkbook.Close


  xlApp.Quit


  Set xlBook = Nothing

  Set xlApp = Nothing

Кажется, я не нашелкакие-либо конкретные рекомендации относительно этого взаимодействия VB Script с Hyperion, поэтому я спрашиваю, сталкивался ли кто-либо из вас с этой проблемой?Ниже приведен макрос VBA:

```

Sub RefreshReports(valYear, valScenario, valUser, valPassword, valConnection)

    Dim sh_array As Variant
    Dim refresh_range As Range


    'Disable screen updating, disable automatic calculations 
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
    Application.AutoCorrect.AutoFillFormulasInLists = False


    'Error handling
    On Error GoTo EndFunction




    'Specify data/report sheets
    sh_array = Array("Validation", "Total Operating Expenses", "Total Revenue", "Stats Accounts", "Net Income After Taxes")

    'assign and convert function parameters
    shParameters.Range("rangeYear").Value = CStr(valYear)
    shParameters.Range("rangeScenario").Value = CStr(valScenario)
    ThisWorkbook.RefreshAll
    Application.Calculate


    'Loop through each report sheet,connect to hyperion with parametred username and password and refresh the sheet
    For i = LBound(sh_array) To UBound(sh_array)
        Debug.Print "Refreshing Sheet: " & ThisWorkbook.Sheets(sh_array(i)).Name
        ThisWorkbook.Sheets(sh_array(i)).Activate
        x = HypConnect(ThisWorkbook.Sheets(sh_array(i)).Name, valUser, valPassword, valConnection)


        Call HypMenuVRefresh
        Application.Wait Time + TimeSerial(0, 0, 5)
        Application.CalculateFullRebuild
        DoEvents
    Next i






    HypDisconnectAll
    shParameters.Activate
    RefreshReports = True
    Application.AutoCorrect.AutoFillFormulasInLists = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    Application.ScreenUpdating = True

End Sub

...