连接Vba

2020-08-19 08:15发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我正在尝试在excel中编程以下...

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

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


我正在尝试在excel中编程以下问题,如果您已经有打开的连接,则只需运行宏,如果未打开则建立连接..但是我不能,您能帮我吗?/p>

这是我的脚本:

私人Sub btAcessar_Click()

   将iUserSap变暗为字符串
   Dim iSenhaSap作为字符串
   昏暗的应用作为对象
   昏暗的连接作为对象
   昏暗会话作为对象
   昏暗的WshShell作为对象
   昏暗的SapGui作为对象

   如果cdUsuario =""或cdSenha =""然后
     MsgBox" Por青睐,预购我们的产品," vbExclamation,"Informaçãode Acesso"
     退出子
   万一

   卸载我
   iUserSap = cdUsuario
   iSenhaSap = cdSenha

   外壳程序" C:\ Program Files(x86)\ SAP \ FrontEnd \ SAPgui \ saplogon.exe",4'文件目录-Nicolas Denye

   设置WshShell = CreateObject(" WScript.Shell")
   直到WshShell.AppActivate(" SAP Logon")执行
     Application.Wait Now + TimeValue(" 0:00:05")
   循环
   设置WshShell = Nothing

   设置SapGui = GetObject(" SAPGUI")
   设置Appl = SapGui.GetScriptingEngine
   设置连接= Appl.Openconnection(" EWP",True)
   设置会话= Connection.Children(0)

   Application.Wait Now + TimeValue(" 0:00:05")

   session.findById(" wnd [0]/usr/txtRSYST-MANDT")。text =" 800"'Mandante
   session.findById(" wnd [0]/usr/txtRSYST-BNAME")。text = iUserSap'Usuário
   session.findById(" wnd [0]/usr/pwdRSYST-BCODE")。text = iSenhaSap'Senha
   session.findById(" wnd [0]/usr/txtRSYST-LANGU")。text =" PT"'Idioma
   session.findById(" wnd [0]")。sendVKey 0'输入

   如果session.Children.Count> 1然后
     'session.findById(" wnd [1]/usr/radMULTI_LOGON_OPT1")。Select
     'session.findById(" wnd [1]/usr/radMULTI_LOGON_OPT1")。SetFocus
     session.findById(" wnd [1]/tbar [0]/btn [0]")。按
   万一

   session.findById(" wnd [0]")。maximize
   'session.findById(" wnd [0]")。sendVKey 0'输入

   如果session.Children.Count> 1然后
     退出子
   万一

   session.findById(" wnd [0]")。maximize
   ultimaCelula =单元格(ActiveSheet.UsedRange.Rows.Count,1)。行
   session.findById(" wnd [0]/tbar [0]/okcd")。text ="/img/nzwm015"'Transação
   session.findById(" wnd [0]")。sendVKey 0
   对于i = 4至ultimaCelula
     如果Cells(i," e")。Value =""或为空,则
       MsgBox" Processo deAlteraçãoFinalizado",vbInformation," EXCEL to SAP"'Mensagem de Alerta
       退出子
     万一
     session.findById(" wnd [0]/usr/ctxtP_LGNUM")。text = Cells(i," d")'Númerodo CD
     session.findById(" wnd [0]/usr/ctxtS_LGPLA-LOW")。text = Cells(i," e")'
     session.findById(" wnd [0]/usr/ctxtS_LGPLA-LOW")。SetFocus
     session.findById(" wnd [0]/usr/ctxtS_LGPLA-LOW")。caretPosition = 9
     session.findById(" wnd [0]/tbar [1]/btn [8]")。按
     session.findById(" wnd [0]/usr/cntlBCALVC_TOOLBAR_​​D100_C1/shellcont/shell")。setCurrentCell -1,""
     session.findById(" wnd [0]/usr/cntlBCALVC_TOOLBAR_​​D100_C1/shellcont/shell")。SelectAll
     session.findById(" wnd [0]/usr/cntlBCALVC_TOOLBAR_​​D100_C1/shellcont/shell")。pressToolbarButton" C_VAL"
     session.findById(" wnd [1]/usr/ctxtLQUA-VFDAT")。text = Cells(i," g")'验证数据
     session.findById(" wnd [1]/usr/ctxtLQUA-VFDAT")。caretPosition = 10
     session.findById(" wnd [1]/tbar [0]/btn [5]")。按
     session.findById(" wnd [0]")。sendVKey 3
   接下来我

   如果cdAcessarSair.Value = True,则
     session.findById(" wnd [0]")。关闭
     session.findById(" wnd [1]/usr/btnSPOP-OPTION1")。press
   万一

 结束子
 
1条回答
CPLASF-自律
2020-08-19 08:39

尼古拉斯·克里斯皮姆

你好尼古拉斯

尝试检查该 打开SAP GUI登录,存在打开的连接。

'...
 卸载我
 iUserSap = cdUsuario
 iSenhaSap = cdSenha

 关于错误继续
   设置SapGui = GetObject(" SAPGUI")
 出错时转到0
 如果不是IsObject(SapGui)然后

   '-SAP登录未运行-

   外壳程序" C:\ Program Files(x86)\ SAP \ FrontEnd \ SAPgui \ saplogon.exe",4
   设置WshShell = CreateObject(" WScript.Shell")
   直到WshShell.AppActivate(" SAP Logon")执行
     Application.Wait Now + TimeValue(" 0:00:05")
   循环
   设置WshShell = Nothing

   设置SapGui = GetObject(" SAPGUI")
   设置Appl = SapGui.GetScriptingEngine
   设置连接= Appl.Openconnection(" EWP",True)
   设置会话= Connection.Children(0)

   session.findById(" wnd [0]/usr/txtRSYST-MANDT")。text =" 800"'Mandante
   session.findById(" wnd [0]/usr/txtRSYST-BNAME")。text = iUserSap'Usuário
   session.findById(" wnd [0]/usr/pwdRSYST-BCODE")。text = iSenhaSap'Senha
   session.findById(" wnd [0]/usr/txtRSYST-LANGU")。text =" PT"'Idioma
   session.findById(" wnd [0]")。sendVKey 0'输入

 其他

   '-SAP登录正在运行-

   设置Appl = SapGui.GetScriptingEngine
   关于错误继续
     设置连接= Appl.Connections()
   出错时转到0

   '-检查连接是否打开-
   如果不是IsObject(Connections)然后

     '-没有打开连接-
     设置连接= Appl.Openconnection(" EWP",True)
     设置会话= Connection.Children(0)

     session.findById(" wnd [0]/usr/txtRSYST-MANDT")。text =" 800"'Mandante
     session.findById(" wnd [0]/usr/txtRSYST-BNAME")。text = iUserSap'Usuário
     session.findById(" wnd [0]/usr/pwdRSYST-BCODE")。text = iSenhaSap'Senha
     session.findById(" wnd [0]/usr/txtRSYST-LANGU")。text =" PT"'Idioma
     session.findById(" wnd [0]")。sendVKey 0'输入

   其他

     '-连接已打开
     对于连接中的每个连接
       设置会话= Connection.Sessions()
       '-检查会话是否以SID EWP打开
       对于会话中的每个会话
         如果Sess.Busy()= vbFalse然后
           设置SessionInfo = Sess.Info()
           如果SessionInfo.SystemName()=" EWP",则
             设置会话=评估
           万一
         万一
       下一个
     下一个

     如果不是IsObject(session)然后

       '-没有EWP会议公开-
       设置连接= Appl.Openconnection(" EWP",True)
       设置会话= Connection.Children(0)

       session.findById(" wnd [0]/usr/txtRSYST-MANDT")。text =" 800"'Mandante
       session.findById(" wnd [0]/usr/txtRSYST-BNAME")。text = iUserSap'Usuário
       session.findById(" wnd [0]/usr/pwdRSYST-BCODE")。text = iSenhaSap'Senha
       session.findById(" wnd [0]/usr/txtRSYST-LANGU")。text =" PT"'Idioma
       session.findById(" wnd [0]")。sendVKey 0'输入

     万一

   万一

 万一

 '-您的代码在这里-
 session.findById(" wnd [0]")。maximize
 ultimaCelula =单元格(ActiveSheet.UsedRange.Rows.Count,1)。行
 session.findById(" wnd [0]/tbar [0]/okcd")。text ="/img/nzwm015"'Transação
 session.findById(" wnd [0]")。sendVKey 0
 '... 

不是很优雅,可以重复很多代码。 但这没关系。 重要的是认识到必须在多个级别上进行检查:

  1. SAP登录是否正在运行
  2. 连接是否打开
  3. 是会话 在SID EWP打开的情况下

所有这些级别都需要不同类型的处理。

最诚挚的问候
Stefan

一周热门 更多>