У меня есть файл 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