Hỗ trợ vòng lặp step 10 trong VK11

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

Tình nghĩa giang hồ

Thanh sơn bất cải, lục thủy trường lưu
Tham gia
29/9/20
Bài viết
330
Được thích
429
Chào anh chị em có vấn đề này nhờ anh chị hỗ trợ giúp.
Em có 1 đoạn code chạy vòng lặp khá tốt, nhưng bị nhược điểm: mỗi lần chạy 1 dòng.
Giả sử 1 dòng chạy bằng 1s thì 1000 dòng nó chạy 1000s
Giờ em mong muốn, tăng tốc vòng lặp lên bằng step
Code chạy từng dòng
Sub VK11_new()
'Ket noi SAP
If Not IsObject(Sap_app) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set Sap_app = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
Set Connection = Sap_app.Children(0)
End If
If Not IsObject(session) Then
Set session = Connection.Children(0)
End If
'chay VBA

Dim dong_cuoi As Long
Dim i As Long
dong_cuoi = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
session.findById("wnd[0]").maximize

For i = 2 To dong_cuoi
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "/nvk11"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtRV13A-KSCHL").Text = "YGKH"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtKOMG-MATNR[0,0]").Text = Sheet1.Rows(i).Cells(1)
session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/txtKONP-KBETR[4,0]").Text = Sheet1.Rows(i).Cells(2)
session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtKONP-KONWA[5,0]").Text = "VND"
session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtKONP-KMEIN[7,0]").Text = Sheet1.Rows(i).Cells(3)
session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtRV13A-DATAB[10,0]").Text = Sheet1.Rows(i).Cells(4)
session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtRV13A-DATBI[11,0]").Text = Sheet1.Rows(i).Cells(5)
session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtRV13A-DATBI[11,0]").SetFocus
session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtRV13A-DATBI[11,0]").caretPosition = 10
session.findById("wnd[0]").sendVKey 0
''nhan SAVE trong SAP
'session.findById("wnd[0]/tbar[0]/btn[11]").press

Sheet1.Rows(i).Cells(6) = "XONG"
Next
End Sub

Code chạy step 10
Dim dong_cuoi As Integer
Dim i As Long
dong_cuoi = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
session.findById("wnd[0]").maximize
For i = 2 To ((dong_cuoi \ 10) + 1) Step 10
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "/nvk11"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtRV13A-KSCHL").Text = "YGKH"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtKOMG-MATNR[0,0]").Text = Sheet1.Range("A" & i & ":A" & i + 9)

Em đã thử thay câu lệnh trên các kiểu vẫn lỗi

session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtKOMG-MATNR[0,& i &]").Text = Sheet1.Range("A" & i & ":A" & i + 9)

Câu lệnh chạy 1 dòng chính xác

session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtKOMG-MATNR[0,0]").Text = Sheet1.Rows(i).Cells(1)
Vậy trường hợp câu lệnh chạy 10 dòng ở chỗ này thì viết như thế nào vậy anh chị
?????
Nhờ anh chị hỗ trợ giúp em trường hợp này.
Em cảm ơn anh chị.
 

File đính kèm

  • VK11_GPE.xlsb
    17.7 KB · Đọc: 5
Lần chỉnh sửa cuối:
Chào anh chị em có vấn đề này nhờ anh chị hỗ trợ giúp.
Em có 1 đoạn code chạy vòng lặp khá tốt, nhưng bị nhược điểm: mỗi lần chạy 1 dòng.
Giả sử 1 dòng chạy bằng 1s thì 1000 dòng nó chạy 1000s
Giờ em mong muốn, tăng tốc vòng lặp lên bằng step
Code chạy từng dòng
Sub VK11_new()
'Ket noi SAP
If Not IsObject(Sap_app) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set Sap_app = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
Set Connection = Sap_app.Children(0)
End If
If Not IsObject(session) Then
Set session = Connection.Children(0)
End If
'chay VBA

Dim dong_cuoi As Long
Dim i As Long
dong_cuoi = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
session.findById("wnd[0]").maximize

For i = 2 To dong_cuoi
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "/nvk11"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtRV13A-KSCHL").Text = "YGKH"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtKOMG-MATNR[0,0]").Text = Sheet1.Rows(i).Cells(1)
session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/txtKONP-KBETR[4,0]").Text = Sheet1.Rows(i).Cells(2)
session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtKONP-KONWA[5,0]").Text = "VND"
session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtKONP-KMEIN[7,0]").Text = Sheet1.Rows(i).Cells(3)
session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtRV13A-DATAB[10,0]").Text = Sheet1.Rows(i).Cells(4)
session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtRV13A-DATBI[11,0]").Text = Sheet1.Rows(i).Cells(5)
session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtRV13A-DATBI[11,0]").SetFocus
session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtRV13A-DATBI[11,0]").caretPosition = 10
session.findById("wnd[0]").sendVKey 0
''nhan SAVE trong SAP
'session.findById("wnd[0]/tbar[0]/btn[11]").press

Sheet1.Rows(i).Cells(6) = "XONG"
Next
End Sub

Code chạy step 10
Dim dong_cuoi As Integer
Dim i As Long
dong_cuoi = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
session.findById("wnd[0]").maximize
For i = 2 To ((dong_cuoi \ 10) + 1) Step 10
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "/nvk11"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtRV13A-KSCHL").Text = "YGKH"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtKOMG-MATNR[0,0]").Text = Sheet1.Range("A" & i & ":A" & i + 9)

Em đã thử thay câu lệnh trên các kiểu vẫn lỗi

session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtKOMG-MATNR[0,& i &]").Text = Sheet1.Range("A" & i & ":A" & i + 9)

Câu lệnh chạy 1 dòng chính xác

session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtKOMG-MATNR[0,0]").Text = Sheet1.Rows(i).Cells(1)
Vậy trường hợp câu lệnh chạy 10 dòng ở chỗ này thì viết như thế nào vậy anh chị
?????
Nhờ anh chị hỗ trợ giúp em trường hợp này.
Em cảm ơn anh chị.
Gán nó vào mảng cải thiện tốc độ.Mà ít có ai đọc code của bạn để sửa đâu.Còn muốn nhanh nhờ viết code khác cho nhanh.
 
Upvote 0
Vậy trường hợp câu lệnh chạy 10 dòng ở chỗ này thì viết như thế nào vậy anh chị
Trường hợp này không thể được nha bạn. Cũng giống như có 1 cái WC và một hàng dài người chờ thì cũng phải lần lượt từng người giải quyết chứ 'step' thì kỳ lắm nha bạn.
 
Upvote 0
Chào anh chị em có vấn đề này nhờ anh chị hỗ trợ giúp.
Em có 1 đoạn code chạy vòng lặp khá tốt, nhưng bị nhược điểm: mỗi lần chạy 1 dòng.
Giả sử 1 dòng chạy bằng 1s thì 1000 dòng nó chạy 1000s
Giờ em mong muốn, tăng tốc vòng lặp lên bằng step
Code chạy từng dòng
Sub VK11_new()
'Ket noi SAP
If Not IsObject(Sap_app) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set Sap_app = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
Set Connection = Sap_app.Children(0)
End If
If Not IsObject(session) Then
Set session = Connection.Children(0)
End If
'chay VBA

Dim dong_cuoi As Long
Dim i As Long
dong_cuoi = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
session.findById("wnd[0]").maximize

For i = 2 To dong_cuoi
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "/nvk11"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtRV13A-KSCHL").Text = "YGKH"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtKOMG-MATNR[0,0]").Text = Sheet1.Rows(i).Cells(1)
session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/txtKONP-KBETR[4,0]").Text = Sheet1.Rows(i).Cells(2)
session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtKONP-KONWA[5,0]").Text = "VND"
session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtKONP-KMEIN[7,0]").Text = Sheet1.Rows(i).Cells(3)
session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtRV13A-DATAB[10,0]").Text = Sheet1.Rows(i).Cells(4)
session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtRV13A-DATBI[11,0]").Text = Sheet1.Rows(i).Cells(5)
session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtRV13A-DATBI[11,0]").SetFocus
session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtRV13A-DATBI[11,0]").caretPosition = 10
session.findById("wnd[0]").sendVKey 0
''nhan SAVE trong SAP
'session.findById("wnd[0]/tbar[0]/btn[11]").press

Sheet1.Rows(i).Cells(6) = "XONG"
Next
End Sub

Code chạy step 10
Dim dong_cuoi As Integer
Dim i As Long
dong_cuoi = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
session.findById("wnd[0]").maximize
For i = 2 To ((dong_cuoi \ 10) + 1) Step 10
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "/nvk11"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtRV13A-KSCHL").Text = "YGKH"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtKOMG-MATNR[0,0]").Text = Sheet1.Range("A" & i & ":A" & i + 9)

Em đã thử thay câu lệnh trên các kiểu vẫn lỗi

session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtKOMG-MATNR[0,& i &]").Text = Sheet1.Range("A" & i & ":A" & i + 9)

Câu lệnh chạy 1 dòng chính xác

session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtKOMG-MATNR[0,0]").Text = Sheet1.Rows(i).Cells(1)
Vậy trường hợp câu lệnh chạy 10 dòng ở chỗ này thì viết như thế nào vậy anh chị
?????
Nhờ anh chị hỗ trợ giúp em trường hợp này.
Em cảm ơn anh chị.
Nên bổ sung delay khoảng thời gian cần chờ cho SAP nhận và thực thi lệnh của nó
 
Upvote 0
Nên bổ sung delay khoảng thời gian cần chờ cho SAP nhận và thực thi lệnh của nó
SAP là một ứng dụng riêng, chưa chắc đã trên Windows, mà là máy chạy hệ điều hành nào đó. Người chủ nó cho kết nối bằng mọt giao diện. Kết nối và sử dụng thế nào thì họ phải có văn bản chi tiết giới hạn sử dụng và cách họ khuyến khích các protocols.
Ở trên tôi đã gợi ý không hẳn lỗi của Excel. Code của thớt bẫy lỗi dứt kết nối và kết nối lại nên rất có thể chạy lâu là do giới hạn kết nối, và cũng có thể do dữ liệu chuyển qua mạng nội bộ (intranet) kém hiệu quả.
Những điều này đáng lẽ thớt phải nối chuyện trước với quản lý của SAP, và quản lý mạng.
 
Upvote 0
Web KT

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

Back
Top Bottom