ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 天空的天

[求助] 请问可以直接用VBA直接登录SAP再进行操作吗?

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-13 17:01 来自手机 | 显示全部楼层
江南新绿 发表于 2019-3-11 22:46
方法一:Sap的快捷登录方式
开始菜单(Ctrl+Esc),右键点击"SAP Logon",打开"属性",在"快捷方式"选项卡上"打 ...

我现在用的是760的GUI,网上关于快捷方式输密码的操作似乎全部失效了,我是用旧版本的保存了带密码的快捷方式,然后用记事本打开,复制密码有关的那段字符到新版本的快捷方式里面,这样实现不输密码账号登陆的。看还有啥更好的办法不。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-13 21:21 来自手机 | 显示全部楼层
江南新绿 发表于 2019-3-11 23:19
管理员账号通常是不会被要到的.一旦要到等同于开挂了,一路登天,不用打怪了.
录制脚本的功能权限也不太会被 ...

确实,看了一圈思路开阔很多,桌面设置带密码的快捷登录,然后用VBA调用这个快捷方式,再运行以前的代码,稳了!

TA的精华主题

TA的得分主题

发表于 2019-3-14 10:30 | 显示全部楼层
江南新绿 发表于 2019-3-11 23:19
管理员账号通常是不会被要到的.一旦要到等同于开挂了,一路登天,不用打怪了.
录制脚本的功能权限也不太会被 ...

录制脚本不让你用 那么SAP的精华都没有了 就是录制宏 修改变量 添加循环 SAP才有无限可能 才能迅速帮你做任何事情

TA的精华主题

TA的得分主题

发表于 2019-3-14 21:00 | 显示全部楼层
回复下23楼,你说:录制脚本不让你用 那么SAP的精华都没有了
这个观点有些偏颇,你百度一下<UIPath入门系列七之SAP录制><sap如何录制脚本和回放>,这里面都提到录制Sap脚本的前提要有事务RZ11的权限,如果没有这个权限,默认的Sap脚本录入的功能是不存在的.

而默认是没有这个脚本录入的功能和权限的.在这个残酷的事实面前,广大一无技术二无门路的爱好者不得不走到了走向了互联网.
到了ExcelHome,这才有了无限可能.

TA的精华主题

TA的得分主题

发表于 2019-3-14 21:26 | 显示全部楼层
waixie002.jpg
说到无限可能,举一个例子吧.比如上图中,有纵向的一长条红蓝色组成的框,那个就是我写的,(Gdip技术画的色块)
看起来虽然简陋,但技术部门在厂部级会议上说这个功能无法实现.
不然怎么办?在几百几千行中去一行一行看啊.看完左边列,再看右边列啊.



TA的精华主题

TA的得分主题

发表于 2019-9-7 15:48 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-10-11 11:47 | 显示全部楼层
Sub SAPLogin()

Dim SapApp
SAPConnString_TEST = "   /SAP_CODEPAGE=1100  /FULLMENU  /M/cn-s-sapq08d.cn.abb.com/S/sapmsQ08/G/OsA_Q08 /UPDOWNLOAD_CP=8400" '换成你的SAP测试系统登陆字符串
SAPConnString = "    /SAP_CODEPAGE=1100  /FULLMENU  /M/cn-s-sapp06d.cn.abb.com/S/sapmsP06/G/OsA Accounting /UPDOWNLOAD_CP=8400" '换成你的SAP正式系统登陆字符串

UserName ="你的SAP登录用户名"
PassWord = "你的SAP登录密码"

'检查是测试模式或是正式模式,设置相应字符串
    If IsTestMode = True Then
        Call GetAccount_test(UserName, Password)
        SAPConnStr = SAPConnString_TEST
    Else
        Call GetAccount(UserName, Password)
        SAPConnStr = SAPConnString
    End If
   
    If CheckExeIsRun("SAPLogon.exe") Then '判断SapGUI是否已经打开
        GoTo 11:    '如已经打开,直接跳转到登录程序
    Else
        Call OpenSapGUI     '否则,先打开SapGUI,再登录
    End If
   
11: If Not IsObject(SapApp) Then
       Set SapGuiAuto = GetObject("SAPGUI")
       Set SapApp = SapGuiAuto.GetScriptingEngine
      
    End If
   
    Set SAPConn = SapApp.OpenConnectionByConnectionString(SAPConnStr)
   
    Sleep (500)
   
    If Not IsObject(Connection) Then
       Set Connection = SapApp.Children(0)
    End If
    If Not IsObject(session) Then
       Set session = Connection.Children(0)
    End If
    If IsObject(wscript) Then
       wscript.ConnectObject session, "on"
       wscript.ConnectObject Application, "on"
    End If
    session.findById("wnd[0]").maximize
    session.findById("wnd[0]/usr/txtRSYST-BNAME").Text = UserName
    session.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = Password
    session.findById("wnd[0]/usr/pwdRSYST-BCODE").SetFocus
    session.findById("wnd[0]/usr/pwdRSYST-BCODE").caretPosition = 8
    session.findById("wnd[0]/tbar[0]/btn[0]").press

'加上你自己录制的功能代码就可以了

End Sub


Function CheckExeIsRun(exeName As String) As Boolean '判断某个进程是否运行
On Error GoTo Err
Dim WMI
Dim Obj
Dim Objs
CheckExeIsRun = False
Set WMI = GetObject("WinMgmts:")
Set Objs = WMI.InstancesOf("Win32_Process")
    For Each Obj In Objs
        If (InStr(UCase(exeName), UCase(Obj.Description)) <> 0) Then
            CheckExeIsRun = True
            If Not Objs Is Nothing Then Set Objs = Nothing
            If Not WMI Is Nothing Then Set WMI = Nothing
            Exit Function
        End If
    Next
        If Not Objs Is Nothing Then Set Objs = Nothing
        If Not WMI Is Nothing Then Set WMI = Nothing
        Exit Function
Err:
    If Not Objs Is Nothing Then Set Objs = Nothing
    If Not WMI Is Nothing Then Set WMI = Nothing
End Function

TA的精华主题

TA的得分主题

发表于 2019-10-11 11:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Sub OpenSapGUI()

    SapFilePath = "SAP\FrontEnd\SAPgui\saplogon.exe"
    FullPath = VBA.Environ("PROGRAMFILES") & "\" & SapFilePath
     
    Shell FullPath, 1
   
    Set WSHShell = CreateObject("WScript.Shell")
    Do Until WSHShell.AppActivate("SAP Logon ")
        Application.Wait Now + TimeValue("0:00:01")
    Loop
   
    Set WSHShell = Nothing

End Sub

TA的精华主题

TA的得分主题

发表于 2019-10-11 11:58 | 显示全部楼层
Function CheckExeIsRun(exeName As String) As Boolean '判断某个进程是否运行
On Error GoTo Err
Dim WMI
Dim Obj
Dim Objs
CheckExeIsRun = False
Set WMI = GetObject("WinMgmts:")
Set Objs = WMI.InstancesOf("Win32_Process")
    For Each Obj In Objs
        If (InStr(UCase(exeName), UCase(Obj.Description)) <> 0) Then
            CheckExeIsRun = True
            If Not Objs Is Nothing Then Set Objs = Nothing
            If Not WMI Is Nothing Then Set WMI = Nothing
            Exit Function
        End If
    Next
        If Not Objs Is Nothing Then Set Objs = Nothing
        If Not WMI Is Nothing Then Set WMI = Nothing
        Exit Function
Err:
    If Not Objs Is Nothing Then Set Objs = Nothing
    If Not WMI Is Nothing Then Set WMI = Nothing
End Function

TA的精华主题

TA的得分主题

发表于 2019-12-14 16:21 | 显示全部楼层
zhzhang9756 发表于 2019-10-11 11:58
Function CheckExeIsRun(exeName As String) As Boolean '判断某个进程是否运行
On Error GoTo Err
Dim W ...

大哥, 麻烦把剩余代码段给补齐一下, 测试查几句, 万分感谢;
GetAccount_test 还有GetAccount这两个
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-13 11:36 , Processed in 0.040350 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表