nhờ trợ gúp về code tự động đăng nhập sap trên VBA

Liên hệ QC

ngocthieugia

Thành viên mới
Tham gia
30/9/08
Bài viết
12
Được thích
3
Chào cả nhà.
hiện tại mình đang tìm hiểu về tự động đăng nhâp sap
bài toán:

dùng excel để liên kết với phần mềm SAP GUI Scripting tự động dowlad dữ liệu theo thời gian chỉ định
mình đang mắc về tự động đăng nhập
1. trường hợp máy khác đang dùng sẽ phải click máy đó để máy mình đăng nhập
2.trường hợp thay đổi ngôn ngữ, máy cũng hỏi 1 thông báo
3. trường hợp máy khác nhập sai pass máy cũng hỏi 1 thông báo

=> nhờ nhà mình trợ giúp để giải bài toán trên

thanks!
 
Quan tâm đến cái này....
Lót dép ngồi hóng vậy
 
Chào cả nhà.
hiện tại mình đang tìm hiểu về tự động đăng nhâp sap
bài toán:

dùng excel để liên kết với phần mềm SAP GUI Scripting tự động dowlad dữ liệu theo thời gian chỉ định
mình đang mắc về tự động đăng nhập
1. trường hợp máy khác đang dùng sẽ phải click máy đó để máy mình đăng nhập
2.trường hợp thay đổi ngôn ngữ, máy cũng hỏi 1 thông báo
3. trường hợp máy khác nhập sai pass máy cũng hỏi 1 thông báo

=> nhờ nhà mình trợ giúp để giải bài toán trên

Cảm ơn!

Sub SAP_OpenSessionFromLogon()

Dim SapGui

Dim Applic

Dim connection

Dim session

Dim WSHShell

Application.DisplayAlerts = False

Shell "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe", vbNormalFocus

Set WSHShell = CreateObject("WScript.Shell")

Do Until WSHShell.AppActivate("SAP Logon ")

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

Loop

Set WSHShell = Nothing

Set SapGui = GetObject("SAPGUI")

Set Applic = SapGui.GetScriptingEngine

Set connection = Applic.OpenConnection("FIH [LHWLBG]", True)

Set session = connection.Children(0)

session.findById("wnd[0]").maximize

session.findById("wnd[0]/usr/txtRSYST-MANDT").Text = "802"

session.findById("wnd[0]/usr/txtRSYST-BNAME").Text = "VNHANPC01"

session.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = "Plan@123"
session.findById("wnd[0]/usr/pwdRSYST-BCODE").SetFocus
session.findById("wnd[0]/usr/pwdRSYST-BCODE").caretPosition = 8
session.findById("wnd[0]").sendVKey 0

session.findById("wnd[1]/usr/radMULTI_LOGON_OPT2").Select
session.findById("wnd[1]/usr/radMULTI_LOGON_OPT2").SetFocus
session.findById("wnd[1]/tbar[0]/btn[0]").press
 
Sub SAP_OpenSessionFromLogon()

Dim SapGui

Dim Applic

Dim connection

Dim session

Dim WSHShell

Application.DisplayAlerts = False

Shell "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe", vbNormalFocus

Set WSHShell = CreateObject("WScript.Shell")

Do Until WSHShell.AppActivate("SAP Logon ")

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

Loop

Set WSHShell = Nothing

Set SapGui = GetObject("SAPGUI")

Set Applic = SapGui.GetScriptingEngine

Set connection = Applic.OpenConnection("FIH [LHWLBG]", True)

Set session = connection.Children(0)

session.findById("wnd[0]").maximize

session.findById("wnd[0]/usr/txtRSYST-MANDT").Text = "802"

session.findById("wnd[0]/usr/txtRSYST-BNAME").Text = "VNHANPC01"

session.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = "Plan@123"
session.findById("wnd[0]/usr/pwdRSYST-BCODE").SetFocus
session.findById("wnd[0]/usr/pwdRSYST-BCODE").caretPosition = 8
session.findById("wnd[0]").sendVKey 0

session.findById("wnd[1]/usr/radMULTI_LOGON_OPT2").Select
session.findById("wnd[1]/usr/radMULTI_LOGON_OPT2").SetFocus
bạn cho mình hỏi. mình cần phải thay đổi những gì để phù hợp với mấy của mình ạ. thank bạnCapture2.PNG
 
bạn cho mình hỏi. mình cần phải thay đổi những gì để phù hợp với mấy của mình ạ. thank bạnView attachment 288512
Sub Logon_Sap()
On Error Resume Next
Dim Appl As Object
Dim Connection As Object
Dim session As Object
Dim WshShell As Object
Dim SapGui As Object

'Of course change for your file directory
Shell "C:\Program Files\SAP\FrontEnd\SAPgui\Saplogon.exe", 4
Set WshShell = CreateObject("WScript.Shell")

Do Until WshShell.AppActivate("SAP Logon ")
Application.Wait Now + TimeValue("0:00:01")
Loop

Set WshShell = Nothing

Set SapGui = GetObject("SAPGUI")
Set Appl = SapGui.GetScriptingEngine
Set Connection = Appl.Openconnection("PRD", _
True)
Set session = Connection.Children(0)

'if You need to pass username and password
session.findById("wnd[0]/usr/txtRSYST-MANDT").Text = "800"
session.findById("wnd[0]/usr/txtRSYST-BNAME").Text = "user1"
session.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = "123456"
session.findById("wnd[0]/usr/txtRSYST-LANGU").Text = "EN"

If session.Children.Count > 1 Then

answer = MsgBox("You've got opened SAP already," & _
"please leave and try again", vbOKOnly, "Opened SAP")

session.findById("wnd[1]/usr/radMULTI_LOGON_OPT3").Select
session.findById("wnd[1]/usr/radMULTI_LOGON_OPT3").SetFocus
session.findById("wnd[1]/tbar[0]/btn[0]").press

Exit Sub

End If

session.findById("wnd[0]/usr/pwdRSYST-BCODE").SetFocus
session.findById("wnd[0]/usr/pwdRSYST-BCODE").caretPosition = 13
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[1]/usr/radMULTI_LOGON_OPT2").Select
session.findById("wnd[1]/usr/radMULTI_LOGON_OPT2").SetFocus
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.createSession
session.createSession
session.createSession
session.createSession
session.findById("wnd[1]").Close
End Sub

Đây là code mà tôi đăng nhập SAP mỗi ngày. Bạn tham khảo thử. Mấy chỗ tôi tô đậm là phải chú ý, điền đúng mới hoạt động. Win 7 có đường dẫn khác, Win 10 có đường dẫn khác.
Cách lấy đường dẫn :
1680746257632.png
 
hi bạn. bạn có thể giúp mình thêm chút là những phần mình tô vàng là gì không ạ, mình chưa hiểu lắmCapture3.PNG
 
hi bạn. bạn có thể giúp mình thêm chút là những phần mình tô vàng là gì không ạ, mình chưa hiểu lắmView attachment 288516
SAP có nhiều dạng 100, 200, 300, 400, 500, 600, 700, 800, hoặc code của bạn ở trên là 802 tức là họ đăng nhập con 802
của bên công ty mình là 800
còn PRD là kết nối đặt tên như hình bên dưới, mình đăng nhập PRD thì chọn PRD

Shell "C:\Program Files\SAP\FrontEnd\SAPgui\Saplogon.exe", 4
"C:\Program Files\SAP\FrontEnd\SAPgui\Saplogon.exe"
cái này là đường dẫn của máy mình
còn số 4 ý nghĩa là:
Trong đoạn mã này, tham số thứ hai của hàm Shell là 4, nó đại diện cho cách thức mà cửa sổ ứng dụng sẽ được hiển thị khi ứng dụng được khởi động.

Cụ thể, giá trị 4 ở đây có nghĩa là cửa sổ ứng dụng sẽ được hiển thị dưới dạng "ActiveX control" (bằng cách sử dụng Windows API). Nếu không truyền tham số này, mặc định cửa sổ ứng dụng SAP Logon sẽ hiển thị dưới dạng "normal window" và người dùng có thể thấy các thanh công cụ, thanh tiêu đề và các nút tùy chọn thông thường.


1680748419630.png
 
Sub Logon_Sap()
On Error Resume Next
Dim Appl As Object
Dim Connection As Object
Dim session As Object
Dim WshShell As Object
Dim SapGui As Object

'Of course change for your file directory
Shell "C:\Program Files\SAP\FrontEnd\SAPgui\Saplogon.exe", 4
Set WshShell = CreateObject("WScript.Shell")

Do Until WshShell.AppActivate("SAP Logon ")
Application.Wait Now + TimeValue("0:00:01")
Loop

Set WshShell = Nothing

Set SapGui = GetObject("SAPGUI")
Set Appl = SapGui.GetScriptingEngine
Set Connection = Appl.Openconnection("PRD", _
True)
Set session = Connection.Children(0)

'if You need to pass username and password
session.findById("wnd[0]/usr/txtRSYST-MANDT").Text = "800"
session.findById("wnd[0]/usr/txtRSYST-BNAME").Text = "user1"
session.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = "123456"
session.findById("wnd[0]/usr/txtRSYST-LANGU").Text = "EN"

If session.Children.Count > 1 Then

answer = MsgBox("You've got opened SAP already," & _
"please leave and try again", vbOKOnly, "Opened SAP")

session.findById("wnd[1]/usr/radMULTI_LOGON_OPT3").Select
session.findById("wnd[1]/usr/radMULTI_LOGON_OPT3").SetFocus
session.findById("wnd[1]/tbar[0]/btn[0]").press

Exit Sub

End If

session.findById("wnd[0]/usr/pwdRSYST-BCODE").SetFocus
session.findById("wnd[0]/usr/pwdRSYST-BCODE").caretPosition = 13
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[1]/usr/radMULTI_LOGON_OPT2").Select
session.findById("wnd[1]/usr/radMULTI_LOGON_OPT2").SetFocus
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.createSession
session.createSession
session.createSession
session.createSession
session.findById("wnd[1]").Close
End Sub

Đây là code mà tôi đăng nhập SAP mỗi ngày. Bạn tham khảo thử. Mấy chỗ tôi tô đậm là phải chú ý, điền đúng mới hoạt động. Win 7 có đường dẫn khác, Win 10 có đường dẫn khác.
Cách lấy đường dẫn :
View attachment 288513
Tự động login nhiều tài khoản thì ntn vậy bác! Em chỉ cần login vào rồi logout ra luôn, em có 1 danh sách tk mà ngày nào cũng phải login.
 
Tự động login nhiều tài khoản thì ntn vậy bác! Em chỉ cần login vào rồi logout ra luôn, em có 1 danh sách tk mà ngày nào cũng phải login.
Mình không chắc lắm nhưng bạn có thể thử code dưới:
PHP:
Sub Logon_Sap()
    On Error Resume Next
    Dim Appl        As Object, Connection As Object, session As Object
    Dim WshShell    As Object, SapGui As Object
    Dim i           As Integer
    Dim accountList As Variant
   
    ' Danh sách tài khoản và mật khẩu
    accountList = Array( _
    Array("user1", "password1"), _
    Array("user2", "password2"), _
    Array("user3", "password3") _
    ' Thêm nhiều tài khoản theo cấu trúc này
    )
   
    ' Khởi động SAP Logon
    Shell "C:\Program Files\SAP\FrontEnd\SAPgui\Saplogon.exe", 4
    Set WshShell = CreateObject("WScript.Shell")
   
    Do Until WshShell.AppActivate("SAP Logon ")
        Application.Wait Now + TimeValue("0:00:01")
    Loop
   
    Set WshShell = Nothing
    Set SapGui = GetObject("SAPGUI")
    Set Appl = SapGui.GetScriptingEngine
   
    ' Vòng lặp qua danh sách tài khoản
    For i = LBound(accountList) To UBound(accountList)
        Set Connection = Appl.Openconnection("PRD", True)
        Set session = Connection.Children(0)
       
        ' Đăng nhập bằng tài khoản từ danh sách
        session.findById("wnd[0]/usr/txtRSYST-MANDT").Text = "800"
        session.findById("wnd[0]/usr/txtRSYST-BNAME").Text = accountList(i)(0)
        session.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = accountList(i)(1)
        session.findById("wnd[0]/usr/txtRSYST-LANGU").Text = "EN"
        session.findById("wnd[0]").sendVKey 0
       
        ' Đợi cho đến khi session được tạo
        While session.Active = FALSE
            Application.Wait Now + TimeValue("0:00:01")
        Wend
       
        ' Đóng session sau khi đăng nhập
        session.findById("wnd[0]").Close
        Set session = Nothing
        Set Connection = Nothing
    Next i
   
    Set Appl = Nothing
    Set SapGui = Nothing
End Sub
Trong mã trên, accountList là một mảng chứa các tài khoản và mật khẩu. Vòng lặp For sẽ đi qua từng tài khoản, đăng nhập và sau đó đóng session.
Bạn cần thay thế "user1", "password1", v.v., bằng thông tin tài khoản thực tế của bạn.
 
Sub SAP_OpenSessionFromLogon()

Dim SapGui

Dim Applic

Dim connection

Dim session

Dim WSHShell

Application.DisplayAlerts = False

Shell "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe", vbNormalFocus

Set WSHShell = CreateObject("WScript.Shell")

Do Until WSHShell.AppActivate("SAP Logon ")

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

Loop

Set WSHShell = Nothing

Set SapGui = GetObject("SAPGUI")

Set Applic = SapGui.GetScriptingEngine

Set connection = Applic.OpenConnection("FIH [LHWLBG]", True)

Set session = connection.Children(0)

session.findById("wnd[0]").maximize

session.findById("wnd[0]/usr/txtRSYST-MANDT").Text = "802"

session.findById("wnd[0]/usr/txtRSYST-BNAME").Text = "VNHANPC01"

session.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = "Plan@123"
session.findById("wnd[0]/usr/pwdRSYST-BCODE").SetFocus
session.findById("wnd[0]/usr/pwdRSYST-BCODE").caretPosition = 8
session.findById("wnd[0]").sendVKey 0

session.findById("wnd[1]/usr/radMULTI_LOGON_OPT2").Select
session.findById("wnd[1]/usr/radMULTI_LOGON_OPT2").SetFocus
session.findById("wnd[1]/tbar[0]/btn[0]").press
Chào bạn, trong trường hợp công ty mình sử dụng SAP có tài khoản và mật khẩu con thì code phải thêm như thế nào ạ?
Trong code của bạn mình hiểu VNHANPC01 là tài khoản, Plan@123 là mật khẩu
Nhưng ở cty mình thì sau khi đăng nhập TK, MK này xong sẽ còn TK và MK con nữa.
 
Chào bạn, trong trường hợp công ty mình sử dụng SAP có tài khoản và mật khẩu con thì code phải thêm như thế nào ạ?
Trong code của bạn mình hiểu VNHANPC01 là tài khoản, Plan@123 là mật khẩu
Nhưng ở cty mình thì sau khi đăng nhập TK, MK này xong sẽ còn TK và MK con nữa.
Trong SAP có Script Recoding and Play back
Thao tác này y chang record Macro vậy
Ghi lại thao tác đăng nhập mật khẩu 2, rồi copy code đó thêm vào dưới mật khẩu 1 là được


1729247036955.png
 
Web KT

Bài viết mới nhất

Back
Top Bottom