Gỡ rối vòng lặp trong VBA thực hiện trên SAP (5 người xem)

  • Thread starter Thread starter Sil_90
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

Sil_90

Thành viên chính thức
Tham gia
22/5/17
Bài viết
94
Được thích
13
Giới tính
Nữ
hi cả nhà,
em có viết logic thêm một mã vào trong SAP, trước khi thêm nó sẽ tìm kiếm bằng item và đoạn mã đó trong SAP. sau đó nó sẽ so sánh với chính đoạn mã em muốn thêm vào SAP. nếu nó giống nhau thì em lưu nó lại và không làm gì cả, nó sẽ cập nhật trạng thái là đã tồn tại. Nếu khác nhau thì nó sẽ thêm đoạn mã ấy vào SAP.
nhưng logic của SAP có một vài điểm không thống nhất do hạn chế của version SAP bọn em dùng. một số mã nó hiển thị không tìm thấy trong BOM và một số mã nó không hiển thị. với mã có hiển thị thì em thêm đoạn code double click để loại bỏ hiển thị và làm các bước tiếp theo như bên dưới. nhưng nó chỉ làm được 1 lần.
tức là nếu nó hiển thị ko có tồn tại trong BOM lần đầu thì nó sẽ go to nxt được. nhưng lần 2 lỗi nó lại không go to nxt được mà chỏ thẳng vào đoạn code compare này. session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/txtRC29P-POSNR[0,0]").SetFocus. các bác cao kiến giúp em làm thế nào để cứ hiển thị không tồn tại trong BOM thì nó sẽ go to nxt được với ạ

On Error GoTo nxt
session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/txtRC29P-POSNR[0,0]").SetFocus
strMat = session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/ctxtRC29P-IDNRK[2,0]").Text
On Error GoTo 0
If ThisWorkbook.Sheets(1).Cells(i, 8) = strMat Then
session.findById("wnd[0]/tbar[0]/btn[11]").press
ThisWorkbook.Sheets(1).Cells(i, 12) = "Already exist"
Else
GoTo nnx:
nxt:
Sheets(1).Cells(i, 12) = "No item " & vItem & " for component " & vMaterial & " could be selected"
session.findById("wnd[2]/tbar[0]/btn[0]").press
session.findById("wnd[1]/tbar[0]/btn[12]").press
nnx:
 
PHP:
const str_id_1 =  "wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/ctxtRC29P-IDNRK[2,0]"
const str_id_2 =  "wnd[0]/tbar[0]/btn[11]"
const str_id_3 =  "wnd[2]/tbar[0]/btn[0]"
const str_id_4 =  "wnd[1]/tbar[0]/btn[12]"
Const icol_ref = 8
Const icol_target = 12
Const str_log = "Already exist"
Dim i as long, ws as worksheet
set ws = Thisworkbook.Worksheets(1)
'...

For i =1 to bí_đường
strMat  = ""
On error resume next
strMat = session.findById( str_id_1 ).Text
if Err.number <> 0 then
ws.Cells(i, icol_target ) = "No item " & vItem & " for component " & vMaterial & " could be selected"
session.findById(str_id_3).press
session.findById(str_id_4).press
else
if ws.cells(i,icol_ref ).value =  strMat   then
session.findById(str_id_2).press
ws.Cells(i, 12) = str_log
end if
end if
Err.Clear
On Error GoTo 0
Next i
 
cám ơn bác đã feedback,
nhưng code của bác, vừa làm mất phần compare của em như bên dưới, nó ko compare được nữa. và cũng không thể double click khi nó show ra lỗi.
1- compare
session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/txtRC29P-POSNR[0,0]").SetFocus
strMat = session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/ctxtRC29P-IDNRK[2,0]").Text
On Error GoTo 0
If ThisWorkbook.Sheets(1).Cells(i, 8) = strMat Then
session.findById("wnd[0]/tbar[0]/btn[11]").press
ThisWorkbook.Sheets(1).Cells(i, 12) = "Already exist"
Else
2- double click khi show lỗi.
nxt:
Sheets(1).Cells(i, 12) = "No item " & vItem & " for component " & vMaterial & " could be selected"
session.findById("wnd[2]/tbar[0]/btn[0]").press
session.findById("wnd[1]/tbar[0]/btn[12]").press
 
Nói tiếng Tây U, viết tắt tùm lum vậy mà bạn cũng hiểu được. Bái phục. :p
bác nói coi chỗ nào là đoạn viết tắt?
Bài đã được tự động gộp:

cả đoạn đây bác ạ:

Sub add_alt()

Dim actWb As String
Dim strMat As String
Dim i As Long, ws As Worksheet
actWb = ActiveWorkbook.Name

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 Application, "on"

End If

With ActiveSheet
LastRow = .Cells(.Rows.Count, "F").End(xlUp).Row
Range("L9:L" & LastRow).Select
Selection.ClearContents
GetSpeed True
End With
For i = 9 To LastRow


Vecn = Sheets(1).Cells(i, 2).Value
vMaterial = Sheets(1).Cells(i, 6).Value
Valt = Sheets(1).Cells(i, 8).Value
vItem = Sheets(1).Cells(i, 9).Value
vplant = Sheets(1).Cells(i, 5).Value
Valtgroup = Sheets(1).Cells(i, 10).Value
Vunit = Sheets(1).Cells(i, 11).Value
If vMaterial = "" Then Exit For
If vplant = "" Or Len(vplant) <> 4 Then GoTo a
session.findById("wnd[0]/tbar[0]/okcd").Text = "/ncs02"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtRC29N-MATNR").Text = vMaterial
session.findById("wnd[0]/usr/ctxtRC29N-WERKS").Text = vplant
session.findById("wnd[0]/usr/ctxtRC29N-STLAN").Text = "1"
session.findById("wnd[0]/usr/ctxtRC29N-AENNR").Text = Vecn
session.findById("wnd[0]/usr/ctxtRC29N-AENNR").SetFocus
session.findById("wnd[0]/usr/ctxtRC29N-AENNR").caretPosition = 10
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/btn%_AUTOTEXT001").press
session.findById("wnd[1]/usr/subPOS_SETP:SAPLCSDI:0710/txtRC29P-SELPO").Text = vItem
session.findById("wnd[1]/usr/subPOS_SETP:SAPLCSDI:0710/txtRC29P-SELID").Text = Valt
session.findById("wnd[1]/usr/subPOS_SETP:SAPLCSDI:0710/txtRC29P-SELPO").caretPosition = 4

session.findById("wnd[1]/tbar[0]/btn[0]").press


On Error GoTo nnx
session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/txtRC29P-POSNR[0,0]").SetFocus
strMat = session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/ctxtRC29P-IDNRK[2,0]").Text
On Error GoTo 0
If ThisWorkbook.Sheets(1).Cells(i, 8) = strMat Then
session.findById("wnd[0]/tbar[0]/btn[11]").press
ThisWorkbook.Sheets(1).Cells(i, 12) = "Already exist"
Else
GoTo nnx:
nxt:
Sheets(1).Cells(i, 12) = "No item " & vItem & " for component " & vMaterial & " could be selected"
session.findById("wnd[2]/tbar[0]/btn[0]").press
session.findById("wnd[1]/tbar[0]/btn[12]").press
nnx:
session.findById("wnd[0]/tbar[1]/btn[5]").press
session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/txtRC29P-POSNR[0,1]").Text = vItem

session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/ctxtRC29P-IDNRK[2,1]").Text = Valt
session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/txtRC29P-MENGE[5,1]").Text = Vunit
session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/txtRC29P-SORTF[3,1]").Text = "ALT"
session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/txtRC29P-POSNR[0,1]").SetFocus
session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/txtRC29P-POSNR[0,1]").caretPosition = 1
session.findById("wnd[0]").sendVKey 2
session.findById("wnd[0]/usr/tabsTS_ITEM/tabpPHPT/ssubSUBPAGE:SAPLCSDI:0830/txtRC29P-ALPGR").Text = Valtgroup
session.findById("wnd[0]/usr/tabsTS_ITEM/tabpPHPT/ssubSUBPAGE:SAPLCSDI:0830/txtRC29P-ALPGR").SetFocus
session.findById("wnd[0]/usr/tabsTS_ITEM/tabpPHPT/ssubSUBPAGE:SAPLCSDI:0830/txtRC29P-ALPGR").caretPosition = 1
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[1]/usr/txtRC29P-ALPRF").Text = "2"
session.findById("wnd[1]/usr/ctxtRC29P-ALPST").Text = "2"
session.findById("wnd[1]/usr/ctxtRC29P-ALPST").SetFocus
session.findById("wnd[1]/usr/ctxtRC29P-ALPST").caretPosition = 1
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[2]/tbar[0]/btn[0]").press
session.findById("wnd[0]/tbar[0]/btn[3]").press
session.findById("wnd[0]/tbar[0]/btn[11]").press
vSt1 = session.findById("wnd[0]/sbar").Text
Sheets(1).Cells(i, 12) = vSt1

GoTo b
a:
Sheets(1).Cells(i, 12) = "Need input Plant number"
b:
Next h
Next i
MsgBox ("done")
GetSpeed False
End Sub
Function GetSpeed(doIt As Boolean)
Application.ScreenUpdating = Not (doIt)
Application.EnableEvents = Not (doIt)
Application.Calculation = IIf(doIt, xlCalculationManual, xlCalculationAutomatic)
End Function
 
Lạ nhỉ. Tự dưng hành văn khó hiểu rồi mắng người ta "ko hiểu [sic]".
Không hiểu mới bái phục người đã hiểu chứ (khen tác giả bài #4).
 
Hỏi về VBA mà đưa vô ngăn này là không hợp rồi.
$$$$@
 
:D /(/gôn từ của người chủ bài đăng này quen quá nhỉ, mình phải Biến thôi!
$$$$@
 
:D /(/gôn từ của người chủ bài đăng này quen quá nhỉ, mình phải Biến thôi!
$$$$@
Không quen lắm đâu. Mấy tay kia tuy ăn nói thô lỗ nhưng không có "quần thần".
Đây là dân "quần thần" mà. Chỉ không hiểu tại sao lại dùng từ "biến" thay vì "scram!"
 
Cháu nó viết tắt và dùng chen tiếng Tây có tí ti thôi, các chú các bác khó tính thế! --=0
 
Cháu nó viết tắt và dùng chen tiếng Tây có tí ti thôi, các chú các bác khó tính thế! --=0
Vụ này tôi đã giải thích đôi lần rồi.
Tôi không biết bạn có con bao nhiều tuổi rồi. Nhưng tôi có con cần phải dạy.
Tôi không muốn có viễn cảnh sáng ra, trên bàn có miếng giấy:
Hai đét,
Bi h m phải đ hc sớm. Ko kp ăn sáng vs đét.
Sổ rỉ. Ta ta

Tôi không thích làm việc đi hàng hai. Nếu tôi chấp nhận viết tắt và Tây U với người Việt thì tôi cũng phải chấp nhận con tôi nói chuyện với mình như thế.
 
Vụ này tôi đã giải thích đôi lần rồi.
Tôi không biết bạn có con bao nhiều tuổi rồi. Nhưng tôi có con cần phải dạy.
Tôi không muốn có viễn cảnh sáng ra, trên bàn có miếng giấy:
Hai đét,
Bi h m phải đ hc sớm. Ko kp ăn sáng vs đét.
Sổ rỉ. Ta ta

Tôi không thích làm việc đi hàng hai. Nếu tôi chấp nhận viết tắt và Tây U với người Việt thì tôi cũng phải chấp nhận con tôi nói chuyện với mình như thế.
Hic. Tôi đùa thôi mà bác. Tôi cũng không thích viết tắt kiểu trời ơi đất hỡi như giới trẻ hiện nay nhưng chắc tôi còn trẻ hơn bác nên cũng dễ chấp nhận kiểu ấy hơn (chứ không phải dễ tính hơn đâu). Con tôi từ bé đã không có lối viết lẹo quẹo như bác nói. Giờ chúng trưởng thành hết rồi, lại càng không bao giờ viết kiểu ấy. Vài dòng giải bày, chúc bác bình an vượt qua mùa dịch!
 
Web KT

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

Back
Top Bottom