Как подавить сообщение об ошибке .NET, вызванное надстройкой EPM - PullRequest
0 голосов
/ 11 июня 2018

Я написал базовый скрипт VBA для имитации функциональности пользовательского меню в Excel.Он взаимодействует с надстройкой EPM SAP BPC и сталкивается с проблемой, когда он выдает ошибку .NET «InvalidArgument = значение« 0 »недопустимо для« индекса »».(подробности ошибки приведены ниже)

Цель кода состоит в том, что при изменении выбора измерения сущности в контекстном меню EPM будет выбрано соответствующее меню (вкладка Excel в таблице Excel) (иостальные скрыты).Практически измерение сущности имеет свойство HotelType с 3 возможными типами Lease, Manag и Admin.Формула EPM EPMMemberProperty () будет извлекать этот тип для каждой вкладки в отдельности, и в VBA это будет критерием для выбора соответствующей вкладки меню.

Учитывая, что установленный брак между Ms Office и SAP EPM достиг всех временГлубина с Office 365 и SAP BPC 10.0 Я пытался использовать только VBA, но безрезультатно.Я попытался Worksheet_Change (ByVal Target As Range) и Sub Worksheet_Calculate () , но изменение контекста EPM не вызывает их.

Поэтому я выбрал EPM Функция AFTER_CONTEXTCHANGE () , которая выполняется правильно, за исключением того, что выдает это.В некоторых случаях ошибка NET, когда нажимается продолжить, код продолжается и завершается правильно, однако я бы хотел, чтобы пользователи не сталкивались с этим.

Имея ограниченные навыки программирования, я предполагаю, что это ошибка отсутствия(или потеря) выбор списка, повторяющего выбор сущности в контекстном меню EPM.И из приведенного ниже кода ошибки я могу видеть, что этот выбор на самом деле является комбинированным списком, но, поскольку он является частью надстройки EPM, я не знаю, как ссылаться на него из VBA и управлять им.

Уродливыйно очень заманчивое При возобновлении ошибки далее не работает.

Вероятно, в моем коде есть ошибка новичка, поэтому вся помощь приветствуется.

С уважением,

Wim

.NET error "InvalidArgument = значение '0' недопустимо для 'index'"

************** Exception Text **************
System.ArgumentOutOfRangeException: InvalidArgument=Value of '0' is not valid for 'index'.
Parameter name: index
   at System.Windows.Forms.ComboBox.ObjectCollection.get_Item(Int32 index)
   at FPMXLClient.UILayer.Controls.CurrentViewComboBox.DrawComboBox(DrawItemEventArgs e, Boolean rezisable, Boolean inverseText) in d:\Olympus_100_REL_XLCLIENT\src\FPMXLClient\src\UILayer\UI\Controls\CurrentView\CurrentViewComboBox.cs:line 570
   at FPMXLClient.UILayer.Controls.CurrentViewComboBox.OnDrawItem(DrawItemEventArgs e) in d:\Olympus_100_REL_XLCLIENT\src\FPMXLClient\src\UILayer\UI\Controls\CurrentView\CurrentViewComboBox.cs:line 561
   at System.Windows.Forms.ComboBox.WmReflectDrawItem(Message& m)
   at System.Windows.Forms.ComboBox.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

VBA Код изменения контекста

Function AFTER_CONTEXTCHANGE()
Dim ShName As String
     ShName = ActiveSheet.Name
     Select Case ShName
        Case "Fin_L"
            Call ContextChange_FinL
        Case "Fin_M"
            Call ContextChange_FinM
        Case "Fin_A"
            Call ContextChange_FinA
        End Select
End Function

Sub ContextChange_FinL()
Dim HotelType As String
HotelType = Range("HotelType_FinL")
Select Case HotelType
Case "LEASE"
        Sheets("Fin_L").Visible = True
        Sheets("Fin_M").Visible = xlVeryHidden
        Sheets("Fin_A").Visible = xlVeryHidden
        Sheets("Fin_L").Select
    Case "MANAG"
        Sheets("Fin_M").Visible = True
        Sheets("Fin_L").Visible = xlVeryHidden
        Sheets("Fin_A").Visible = xlVeryHidden
        Sheets("Fin_M").Select
    Case "ADMIN"
        Sheets("Fin_A").Visible = True
        Sheets("Fin_L").Visible = xlVeryHidden
        Sheets("Fin_M").Visible = xlVeryHidden
        Sheets("Fin_A").Select
End Select
End Sub

Sub ContextChange_FinM()
Dim HotelType As String
HotelType = Range("HotelType_FinM")

    Select Case HotelType
    Case "LEASE"
        Sheets("Fin_L").Visible = True
        Sheets("Fin_M").Visible = xlVeryHidden
        Sheets("Fin_A").Visible = xlVeryHidden
        Sheets("Fin_L").Select
    Case "MANAG"
        Sheets("Fin_M").Visible = True
        Sheets("Fin_L").Visible = xlVeryHidden
        Sheets("Fin_A").Visible = xlVeryHidden
        Sheets("Fin_M").Select
    Case "ADMIN"
        Sheets("Fin_A").Visible = True
        Sheets("Fin_L").Visible = xlVeryHidden
        Sheets("Fin_M").Visible = xlVeryHidden
        Sheets("Fin_A").Select
    End Select
End Sub

Sub ContextChange_FinA()
Dim HotelType As String
HotelType = Range("HotelType_FinA")

    Select Case HotelType
    Case "LEASE"
        Sheets("Fin_L").Visible = True
        Sheets("Fin_M").Visible = xlVeryHidden
        Sheets("Fin_A").Visible = xlVeryHidden
        Sheets("Fin_L").Select
    Case "MANAG"
        Sheets("Fin_M").Visible = True
        Sheets("Fin_L").Visible = xlVeryHidden
        Sheets("Fin_A").Visible = xlVeryHidden
        Sheets("Fin_M").Select
        Case "ADMIN"
        Sheets("Fin_A").Visible = True
        Sheets("Fin_L").Visible = xlVeryHidden
        Sheets("Fin_M").Visible = xlVeryHidden
        Sheets("Fin_A").Select
End Select
End Sub

1 Ответ

0 голосов
/ 18 июня 2018

Проблема не постоянна, но, кажется, вызвана шагом сокрытия листов.Поэтому перемещение скрытия исходного листа (если оно отличается от целевого) только после выбора целевого листа предотвращает это.

Пример:

    Sub ContextChange_FinM()
     HotelType = Range("HotelType_FinM")

        Select Case HotelType
    Case "LEASE"
            If Sheets("Fin_L").Visible = xlVeryHidden Then Sheets("Fin_L").Visible = True Else 'do nothing
            Sheets("Fin_L").Select
            Sheets("Fin_M").Visible = xlVeryHidden

    Case "MANAG"
        'do nothing
 Case "ADMIN"
        If Sheets("Fin_A").Visible = xlVeryHidden Then Sheets("Fin_A").Visible = True Else 'do nothing
        Sheets("Fin_A").Select
        Sheets("Fin_M").Visible = xlVeryHidden

    End Select
End Sub
...