Обновление данных с помощью VBA и VB Script в Smart View for Oracle
У меня есть файл Excel (Get_Hyperion_Data.xlsm) с несколькими рабочими листами, каждый из которых содержит отчет по гипериону, где данные извлекаются с помощью функции "HsGetValue()".
Я создал макрос, который позволяет мне указывать две переменные (год и сценарий) и обновлять каждый лист после обновления указанных переменных. Если я открою этот файл Excel, укажу переменные и запусту макрос, весь отчет обновится без проблем, как и ожидалось. Я предоставил код для макроса ниже
Я хотел сделать еще один шаг в плане автоматизации и создать скрипт VB, который бы открывал Get_Hyperion_Data.xlsm, определял переменные и вызывал макрос обновления.
Однако, когда я пытаюсь запустить макрос через VB Script, происходит что-то странное. Я получаю сообщение об ошибке
Msgstr "Ошибка Essbase: член [Сценарий] неуместен".
Это странно, учитывая, что я не получаю никаких ошибок при открытии 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