Значения ячеек теряются при копировании листа после обновления SmartView Hyperion? - PullRequest
0 голосов
/ 02 июля 2019

Лист Excel с формулами Smart View / Hyperion, который был успешно обновлен с помощью HypMenuVRefresh (), копируется в новую книгу, чтобы заменить формулы значениями и привести их в порядок, однако при копировании теряются значения ячеек.

Из онлайн-исследования выясняется, что копия теряет необходимые метаданные SmartView / Hyperion, которые можно повторно импортировать на скопированный лист с помощью HypCopyMetaData () ...... См. Руководство для разработчиков https://docs.oracle.com/cd/E72988_01/DGSMV/ch04s07.html.

После успешного обновления исходного листа я попытался скопировать в одну и ту же wb и другую wb, но оба результата привели к одной и той же ошибке.

Других вызовов API нет.Основная функция реплицирует кнопку ленты (HypMenuVRefresh = Refresh) и работает без необходимости создания подключения Hyperion через VBA, поскольку она принимает учетные данные пользователя.Нужно ли устанавливать соединение для функций, не относящихся к Меню (т. Е. Для любых, не начинающих "HypMenu ....")?

Объявление API VBA 32 & 64bit

#If VBA7 Then
    Private Declare PtrSafe Function HypMenuVRefresh Lib "HsAddin" () As Long       
    Private Declare PtrSafe Function HypCopyMetaData Lib "HsAddin" (ByVal vtSourceSheetName As Variant, ByVal vtDestinationSheetName As Variant) As Long
#Else
    Private Declare Function HypMenuVRefresh Lib "HsAddin"() As Long                
    Private Declare Function HypCopyMetaData Lib "HsAddin" (ByVal vtSourceSheetName As Variant, ByVal vtDestinationSheetName As Variant) As Long
#End If

Основной VBA sub toимпортировать метаданные:

Private Sub sSmartViewAPI_ImportHyperionMetaDataForASheet(ByRef argwb_DestWB As Workbook, ByVal vtSourceSheetName As Variant, ByVal vtDestinationSheetName As Variant)

    'The destination sheet MUST be active
    argwb_DestWB .Activate
    argwb_DestWB .Sheets(vtDestinationSheetName).Activate

    'Perform the refresh & capture the status
    Dim ll_Status As Long
    ll_Status = HypCopyMetaData(vtSourceSheetName, vtDestinationSheetName)

    'Display message if status is not 0, all others are errors
    If ll_Status <> 0 Then
        MsgBox "HYPERION IMPORT METADATA ERROR"
        End
    End If

End Sub

Код ошибки SmartView / Hyperion -3 «Ошибка инициализации».возвращается, и ошибки формул отображаются в ячейках вместо значений, успешно извлеченных из Hyperion.

Как мы копируем лист, не теряя значения ячеек?

...