禁止在Analysis for Office中显示警告消息

2020-08-31 22:07发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)大家好, 我有一个Offi...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我有一个Office分析模板。 其中有很多尺寸选择。 执行诸如保存,提示之类的任何操作时,都收到很少的警告消息。 由于我的查询结构,我不想在BEx旁边更正警告。

我刚刚在sap社区帮助门户上检查了一些VB代码,但无法实现。

在这里,我附上警告的屏幕快照以禁止显示。 请帮我。

第一则完整消息:组合检查:0WORKCENTER字符的特征值GLAP/M1。 不存在(RSPLS_CR-009,BDV)

第二条完整消息: Chirala Line 2 Months尚未准备就绪:数据切片,特征关系(RSPLS_CR-046,BDV)

谢谢。

warning.jpg (64.5 kB)
8条回答
当学会了学习
2020-08-31 22:29

我发现在VBA中实施此操作并不困难。

第一件事是识别您要处理的所有消息。 因此,在工作簿中,您可以使用函数SAPListOfMessages列出所有消息,包括可用于识别消息的所有信息。

 = SAPListOfMessages(; TRUE)

首先,您注册您的回调,在本例中,为此创建了一个子过程,以使维护不在ThisWorkbook类之内。

公共子工作簿_SAP_Initialize()
     '注册回调
     呼叫Register_Callbacks
 结束

过程很简单

子Register_Callbacks()
     调用Application.Run(" SAPExecuteCommand"," RegisterCallback"," BeforeMessageDisplay"," Callback_BeforeMessageDisplay")
 结束子
 

现在,我调用了一个过程,该过程可以调用所有我不想运行的东西,但是如果不想,可以在这里实现逻辑。

 Sub Callback_BeforeMessageDisplay()
     呼叫BeforeMessageDisplay
 结束子
 

然后,我实现了一种支持功能,以简化消息的抑制。 messageState仅用于调试,因此您可以将其省略,但是我发现将其打印到立即窗口以遵循操作确实很棒。

'简化消息抑制
 函数SuppressMessage(消息为变体,i,可选的ByRef messageState为字符串)
     SuppressMessage = Application.Run(" SAPSuppressMessage",messages(i,1))
     messageState ="禁止显示消息:"
 结束功能
 

现在的诀窍是,下一个过程必须是一个函数。 我发现,如果它不是函数类型,则不会执行。

但这是我实现抑制逻辑的地方

简短示例版本

函数BeforeMessageDisplay()
     昏暗的messageList作为变体
     变暗的邮件
     变体暗淡
     昏暗的messageCount为变量,messageState为字符串
     昏暗的整数
    
     Debug.Print"开始消息处理:",日期,时间()
    
     messageList = Application.Run(" SAPListOfMessages"," True")
     messages = GetAsTwoDimArray(messageList)'参见"使用分析函数"
     messageCount = UBound(messages,1)
    
 '这是处理消息的地方。
     对于i = 1 To messageCount
         '做决定行动的逻辑
         如果消息(i,3)=" RSPLF",则
             如果messages(i,5)=" INFORMATION",则
                 lRet = SuppressMessage(消息,i,messageState)
             万一
         万一
     接下来我
 结束功能

相同版本的长示例

函数BeforeMessageDisplay()
     昏暗的messageList作为变体
     变暗的邮件
     变体暗淡
     昏暗的messageCount为变量,messageState为字符串
     昏暗的整数
    
     Debug.Print"开始消息处理:",日期,时间()
    
     messageList = Application.Run(" SAPListOfMessages"," True")
     messages = GetAsTwoDimArray(messageList)'参见"使用分析函数"
     messageCount = UBound(messages,1)
    
 '这是处理消息的地方。
     对于i = 1 To messageCount
         messageState ="消息:"
         '禁止计划功能消息
         如果消息(i,3)=" RSPLF",则
             如果messages(i,5)=" INFORMATION",则
                 lRet = SuppressMessage(消息,i,messageState)
             万一
         万一
         如果消息(i,3)=" RSPLS",则
             "如果有两个用户正在计划ODI,那么只有一个人可以锁定这些假设。 这抑制了该消息以减少混乱。
             如果消息(i,6)=" ZFI_C03",则
                 lRet = SuppressMessage(消息,i,messageState)
                 '向用户添加有关锁的自定义消息
                 lRet = Application.Run(" SAPAddMessage","假设被用户"&messages(i,7)&"。"," INFORMATION"锁定)'信息,警告,错误或严重
             万一
         万一
         如果messages(i,3)=" BRAIN",则
             '数据切片消息
             如果消息(i,4)=" BRAIN-641",则
                 lRet = SuppressMessage(消息,i,messageState)
             万一
             如果消息(i,4)=" BRAIN-109",则
                 lRet = SuppressMessage(消息,i,messageState)
             万一
         万一
    
     '处理打印是否返回错误
     关于错误继续
         '打印所有消息
         调试。打印messageState,messages(i,1),messages(i,2),messages(i,3),messages(i,4),messages(i,5),messages(i,6),messages(i  ,7),消息(i,8),消息(i,9),消息(i,10)
     出错时转到0
     接下来我
 结束功能
 

最后我有这个功能来处理带有返回值的数组问题

'实用功能
 函数GetAsTwoDimArray(值作为变量)作为变量
     '值是错误,返回错误
     如果IsError(value)然后
     GetAsTwoDimArray =值
    
     '值是数组
     ElseIf IsArray(value)然后
     '首先检查数组是否为二维
     通过请求第二维的上限。
     '如果不是这种情况,则会发生错误(Err.Number <> 0)。
    
     '忽略错误,在本地处理
     关于错误继续
     Dim lIndex作为整数
     将lErrorCode设置为整数
     lIndex = UBound(值,2)
     lErrorCode =错误编号
     '将错误处理设置回默认值
     出错时转到0
    
     如果lErrorCode = 0,则
         '没有错误:数组是二维的
         GetAsTwoDimArray =值
     其他
         '将一维数组复制为二维数组
         昏暗的整数
         Dim lArray()作为变体
         ReDim lArray(1到1,1到UBound(值))
         对于i = 1到UBound(lArray,2)
             lArray(1,i)=值(i)
         下一个
         GetAsTwoDimArray = lArray
     万一
    
     其他
     '返回空
         GetAsTwoDimArray =空
     万一
 结束功能
 

我希望这会有所帮助。

一周热门 更多>