首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何抑制由EPM外接程序触发的.NET错误消息

如何抑制由EPM外接程序触发的.NET错误消息
EN

Stack Overflow用户
提问于 2018-06-11 13:26:53
回答 1查看 470关注 0票数 0

我编写了一个基本的VBA脚本来模拟excel中的用户菜单功能。它与SAP的EPM外接程序交互,如果它抛出.NET错误“'0‘的InvalidArgument=Value对’索引‘无效”,则面临一个问题。(下面是错误的更多细节)

代码的目标是,在EPM上下文菜单中实体维度的选择更改后,将选择相应的菜单(excel电子表格的excel选项卡)(而其他菜单则隐藏)。实际上,实体维度有一个属性HotelType,它有3种可能的类型Lease & Admin。EPM公式EPMMemberProperty()将分别为每个选项卡检索这种类型,在VBA中,这将是选择相应菜单选项卡的条件。

考虑到Ms和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中引用/控制它。

丑陋,但非常诱人的错误简历下一次不起作用。

在我的代码中可能有初学者的错误,所以所有的帮助都是值得感谢的。

致以亲切的问候,

威姆

.NET错误"InvalidArgument=Value of '0‘对于’index‘无效

代码语言:javascript
复制
************** 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上下文更改代码

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2018-06-18 13:30:34

这个问题不一致,但似乎是由隐藏工作表的步骤触发的。因此,只有在选择目标表之后才移动源工作表的隐藏(当与目标表不同时),这将阻止这一点。

示例:

代码语言:javascript
复制
    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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50798842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档