Я написал базовый скрипт 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