- Tham gia
- 4/6/06
- Bài viết
- 901
- Được thích
- 2,717
SAP Scripting - Excel và SAP (P2)
Phần 2: Chỉnh sửa Script và đưa vào file Excel
Trong phần 1 trước, tôi đã giúp bạn hình thành 1 đoạn script cơ bản bằng chức năng Script Recording của SAP. Bây giờ, tôi sẽ dùng chính file script này để giúp bạn cách chỉnh sửa và đưa vào file Excel của bạn nhé. Bạn có thể quay về phần 1 tại đây để lấy script nhằm thực hành cho phần 2 này.
Đây là script của lần trước và tôi đã ghi chú lại một chút để bạn có thể hiểu trực tiếp trong script luôn.
Khá dễ hiểu đúng không? Gần như tất cả mọi thao tác bạn thực hiện đều đã được ghi lại, y hệt như bạn ghi một macro trong Excel. Do đó, một cách tương tự, nếu bạn cảm thấy bạn đã quên một điều gì đó (đó có thể là do những thiết lập mặc định trong máy tính của bạn) và bạn mong muốn có 1 script tổng quát hơn, bạn nên ghi lại một script mới với một kịch bản tổng quát nhất để sau đó chúng ta tiến hành điều chỉnh nhằm tăng độ linh hoạt của script này.
Bây giờ, bạn mở Excel, vào VBA, tạo một module mới, sub mới và copy tất cả đoạn trên vào module như sau. Bạn lưu ý trên hình có 4 chỗ tôi khoanh đỏ, bạn nên thêm chữ s đằng trước Application như tôi để tạo thành 1 biến mới.
Vậy là bây giờ bạn đã có một macro hoàn chỉnh rồi đấy. Bạn thử bấm Play xem, macro này sẽ giúp bạn thực hiện những gì bạn đã làm trên SAP từ nãy giờ thông qua Excel.
Tuy nhiên, cái chúng ta muốn chính là chỉnh sửa 100 mã vật tư khác nhau, do đó bạn cần phải chỉnh sửa thêm trong code này vì nếu bạn giữ như vậy, nó sẽ chỉ làm giúp bạn duy nhất 1 mã mà thôi (tương tự như macro khi bạn ghi trong Excel, bạn cũng cần chỉnh sửa để nó thực hiện được linh hoạt).
Đầu tiên, chắc chắn rồi, bạn nên có một khung mẫu. Ở đây, tôi giả sử vật tư tôi cần sẽ ở cột A và giá trị khối lượng LE sẽ ở cột B.
Sau đó, tôi sẽ vào code và chỉnh sửa lại như dưới đây:
Bạn có nhận thấy sự khác biệt không? Tôi đã lồng thêm một vòng lặp và cho code lấy dữ liệu của từng ô trong cột A và B để điền vào vị trí của mã P và số lượng 4000 từ đợt ghi trước. Bây giờ việc tiếp theo chỉ là làm một nút chọn để kích hoạt macro này mà thôi.
Vậy là từ giờ phút này, bạn chỉ việc bật SAP và file Excel này, sau đó chạy macro là các mã vật tư của bạn sẽ tự thay đổi tuần tự trên Excel một cách dễ dàng.
Dĩ nhiên, code này vẫn còn nhiều hạn chế do chúng ta chỉ mới tập sửa chữa tại chỗ nhập của SAP chứ vẫn chưa tìm hiểu kỹ về giao diện, tương tác của SAP cũng như các chiến lược đối phó với những rủi ro bất ngờ như cửa sổ thông điệp bỗng nhiên hiện ra, hay thiết lập Warehouse Management 2 của script trước vẫn đang bị cố định ở hàng số 14 mà sẽ có nhiều mã, thiết lập này ở hàng 13, hay hàng 10 hoặc thậm chí không có. Và đó sẽ là chủ đề cho phần tiếp theo bạn nhé.
Chúc bạn thành công!
Một số bài viết có liên quan:
1/ SAP Scripting - Excel và SAP (P1)
2/ PivotTable trong Excel 2010 - 2013
3/ Highlight hàng khi di chuyển chuột
4/ Sử dụng các nút điều khiển (Form Controls) trong một bảng tính
5/ Thủ thuật sử dụng tên ở vùng giao nhau của hai dãy
6/ Tổng hợp dữ liệu trên nhiều bảng tính
7/ Công cụ Camera trong Excel
8/ Mật khẩu và bảo mật trong Excel
9/ Excel nâng cao: Sử dụng sự lặp lại và các tham chiếu tuần hoàn
10/ 10 lý do để học công thức Excel
Phần 2: Chỉnh sửa Script và đưa vào file Excel
Trong phần 1 trước, tôi đã giúp bạn hình thành 1 đoạn script cơ bản bằng chức năng Script Recording của SAP. Bây giờ, tôi sẽ dùng chính file script này để giúp bạn cách chỉnh sửa và đưa vào file Excel của bạn nhé. Bạn có thể quay về phần 1 tại đây để lấy script nhằm thực hành cho phần 2 này.
Đây là script của lần trước và tôi đã ghi chú lại một chút để bạn có thể hiểu trực tiếp trong script luôn.
Mã:
'Đoạn code này dùng để kết nối với SAP.
If Not IsObject(application) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
Set connection = application.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 'Dòng code này để phóng to màn hình SAP
session.findById("wnd[0]/tbar[0]/okcd").text = "mm02" 'Nhập t-code mm02
session.findById("wnd[0]").sendVKey 0 ‘Đại diện cho phím Enter
session.findById("wnd[0]/usr/ctxtRMMG1-MATNR").text = "P11220169" 'Nhập mã NVL vào ô
session.findById("wnd[0]").sendVKey 0 ‘Nhấn Enter
session.findById("wnd[1]/usr/tblSAPLMGMMTC_VIEW").getAbsoluteRow(14).selected = true 'Chọn dòng số 14 trong bảng mới hiện ra sau khi Enter
session.findById("wnd[1]/usr/tblSAPLMGMMTC_VIEW/txtMSICHTAUSW-DYTXT[0,14]").setFocus
session.findById("wnd[1]/usr/tblSAPLMGMMTC_VIEW/txtMSICHTAUSW-DYTXT[0,14]").caretPosition = 0
session.findById("wnd[1]").sendVKey 0 ‘Nhấn Enter
session.findById("wnd[1]/usr/ctxtRMMG1-WERKS").text = "VN11" 'Nhập VN11 vào cửa sổ hiện ra, ô thứ nhất
session.findById("wnd[1]/usr/ctxtRMMG1-LGNUM").text = "VMR" 'Tương tự nhập tiếp VMR
session.findById("wnd[1]/usr/ctxtRMMG1-LGTYP").text = "TWB" 'Nhập TWB
session.findById("wnd[1]/usr/ctxtRMMG1-LGTYP").setFocus
session.findById("wnd[1]/usr/ctxtRMMG1-LGTYP").caretPosition = 3
session.findById("wnd[1]/tbar[0]/btn[0]").press 'Nhấn chọn dấu kiểm đồng ý
session.findById("wnd[0]/usr/tabsTABSPR1/tabpSP22/ssubTABFRA1:SAPLMGMM:2000/subSUB2:SAPLMGD1:2732/txtMLGN-LHMG1").text = "4000" 'Nhập số 4000 vào ô LE Quantity
session.findById("wnd[0]/usr/tabsTABSPR1/tabpSP22/ssubTABFRA1:SAPLMGMM:2000/subSUB2:SAPLMGD1:2732/txtMLGN-LHMG1").setFocus
session.findById("wnd[0]/usr/tabsTABSPR1/tabpSP22/ssubTABFRA1:SAPLMGMM:2000/subSUB2:SAPLMGD1:2732/txtMLGN-LHMG1").caretPosition = 17
session.findById("wnd[0]/tbar[0]/btn[11]").press 'Nhấn nút Save ở phía trên để lưu
Khá dễ hiểu đúng không? Gần như tất cả mọi thao tác bạn thực hiện đều đã được ghi lại, y hệt như bạn ghi một macro trong Excel. Do đó, một cách tương tự, nếu bạn cảm thấy bạn đã quên một điều gì đó (đó có thể là do những thiết lập mặc định trong máy tính của bạn) và bạn mong muốn có 1 script tổng quát hơn, bạn nên ghi lại một script mới với một kịch bản tổng quát nhất để sau đó chúng ta tiến hành điều chỉnh nhằm tăng độ linh hoạt của script này.
Bây giờ, bạn mở Excel, vào VBA, tạo một module mới, sub mới và copy tất cả đoạn trên vào module như sau. Bạn lưu ý trên hình có 4 chỗ tôi khoanh đỏ, bạn nên thêm chữ s đằng trước Application như tôi để tạo thành 1 biến mới.
Vậy là bây giờ bạn đã có một macro hoàn chỉnh rồi đấy. Bạn thử bấm Play xem, macro này sẽ giúp bạn thực hiện những gì bạn đã làm trên SAP từ nãy giờ thông qua Excel.
Tuy nhiên, cái chúng ta muốn chính là chỉnh sửa 100 mã vật tư khác nhau, do đó bạn cần phải chỉnh sửa thêm trong code này vì nếu bạn giữ như vậy, nó sẽ chỉ làm giúp bạn duy nhất 1 mã mà thôi (tương tự như macro khi bạn ghi trong Excel, bạn cũng cần chỉnh sửa để nó thực hiện được linh hoạt).
Đầu tiên, chắc chắn rồi, bạn nên có một khung mẫu. Ở đây, tôi giả sử vật tư tôi cần sẽ ở cột A và giá trị khối lượng LE sẽ ở cột B.
Sau đó, tôi sẽ vào code và chỉnh sửa lại như dưới đây:
Mã:
Sub Edit_LEQuantity()
Dim i As Long, EndR As Long
If Not IsObject(sApplication) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set sApplication = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
Set Connection = sApplication.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 sApplication, "on"
End If
EndR = Sheet1.Range("A65000").End(xlUp).Row
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "mm02"
session.findById("wnd[0]").sendVKey 0
For i = 2 To EndR
session.findById("wnd[0]/usr/ctxtRMMG1-MATNR").Text = Sheet1.Range("A" & i).Value
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[1]/usr/tblSAPLMGMMTC_VIEW").getAbsoluteRow(14).Selected = True
session.findById("wnd[1]/usr/tblSAPLMGMMTC_VIEW/txtMSICHTAUSW-DYTXT[0,14]").SetFocus
session.findById("wnd[1]/usr/tblSAPLMGMMTC_VIEW/txtMSICHTAUSW-DYTXT[0,14]").caretPosition = 0
session.findById("wnd[1]").sendVKey 0
session.findById("wnd[1]/usr/ctxtRMMG1-WERKS").Text = "VN11"
session.findById("wnd[1]/usr/ctxtRMMG1-LGNUM").Text = "VMR"
session.findById("wnd[1]/usr/ctxtRMMG1-LGTYP").Text = "TWB"
session.findById("wnd[1]/usr/ctxtRMMG1-LGTYP").SetFocus
session.findById("wnd[1]/usr/ctxtRMMG1-LGTYP").caretPosition = 3
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[0]/usr/tabsTABSPR1/tabpSP22/ssubTABFRA1:SAPLMGMM:2000/subSUB2:SAPLMGD1:2732/txtMLGN-LHMG1").Text = Sheet1.Range("B" & i).Value
session.findById("wnd[0]/usr/tabsTABSPR1/tabpSP22/ssubTABFRA1:SAPLMGMM:2000/subSUB2:SAPLMGD1:2732/txtMLGN-LHMG1").SetFocus
session.findById("wnd[0]/usr/tabsTABSPR1/tabpSP22/ssubTABFRA1:SAPLMGMM:2000/subSUB2:SAPLMGD1:2732/txtMLGN-LHMG1").caretPosition = 17
session.findById("wnd[0]/tbar[0]/btn[11]").press
Next i
MsgBox "Done"
End Sub
Bạn có nhận thấy sự khác biệt không? Tôi đã lồng thêm một vòng lặp và cho code lấy dữ liệu của từng ô trong cột A và B để điền vào vị trí của mã P và số lượng 4000 từ đợt ghi trước. Bây giờ việc tiếp theo chỉ là làm một nút chọn để kích hoạt macro này mà thôi.
Vậy là từ giờ phút này, bạn chỉ việc bật SAP và file Excel này, sau đó chạy macro là các mã vật tư của bạn sẽ tự thay đổi tuần tự trên Excel một cách dễ dàng.
Dĩ nhiên, code này vẫn còn nhiều hạn chế do chúng ta chỉ mới tập sửa chữa tại chỗ nhập của SAP chứ vẫn chưa tìm hiểu kỹ về giao diện, tương tác của SAP cũng như các chiến lược đối phó với những rủi ro bất ngờ như cửa sổ thông điệp bỗng nhiên hiện ra, hay thiết lập Warehouse Management 2 của script trước vẫn đang bị cố định ở hàng số 14 mà sẽ có nhiều mã, thiết lập này ở hàng 13, hay hàng 10 hoặc thậm chí không có. Và đó sẽ là chủ đề cho phần tiếp theo bạn nhé.
Chúc bạn thành công!
Một số bài viết có liên quan:
1/ SAP Scripting - Excel và SAP (P1)
2/ PivotTable trong Excel 2010 - 2013
3/ Highlight hàng khi di chuyển chuột
4/ Sử dụng các nút điều khiển (Form Controls) trong một bảng tính
5/ Thủ thuật sử dụng tên ở vùng giao nhau của hai dãy
6/ Tổng hợp dữ liệu trên nhiều bảng tính
7/ Công cụ Camera trong Excel
8/ Mật khẩu và bảo mật trong Excel
9/ Excel nâng cao: Sử dụng sự lặp lại và các tham chiếu tuần hoàn
10/ 10 lý do để học công thức Excel
File đính kèm
Lần chỉnh sửa cuối:
Upvote
0