Cảm ơn các bác đã đọc bài của em_Không nhận VBAProject sau khi kết xuất file excel từ SAP Gui_Em đã sửa được

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

hieucongtu

Thành viên mới
Tham gia
23/4/21
Bài viết
4
Được thích
3
Em đã có một hành trình dài tìm kiếm trên Internet và nhiều diễn đàn cuối cùng đã tìm ra được hướng giải quyết và chia sẻ lại cho mọi người nếu như có ai đang mắc phải và không có cách nào xử lý được ạ.

Dim appWorkbookCount As Long
appWorkbookCount = Application.Workbooks.Count

Do
DoEvents
Loop While appWorkbookCount = Application.Workbooks.Count

Dim wb As Workbook, wbExport As Workbook
For Each wb In Application.Workbooks
If InStr(1, wb.Name, "UpdatePO") > 0 Then
Set wbExport = wb
End If
Next wb
 
Em đã có một hành trình dài tìm kiếm trên Internet và nhiều diễn đàn cuối cùng đã tìm ra được hướng giải quyết và chia sẻ lại cho mọi người nếu như có ai đang mắc phải và không có cách nào xử lý được ạ.

Dim appWorkbookCount As Long
appWorkbookCount = Application.Workbooks.Count

Do
DoEvents
Loop While appWorkbookCount = Application.Workbooks.Count

Dim wb As Workbook, wbExport As Workbook
For Each wb In Application.Workbooks
If InStr(1, wb.Name, "UpdatePO") > 0 Then
Set wbExport = wb
End If
Next wb
Xin cảm ơn. Bạn có thể giải thích hoặc dịch sang tiếng Việt đoạn mã trên để anh em có thể hiểu mà áp dụng (nếu bị).
 
Upvote 0
Xin cảm ơn. Bạn có thể giải thích hoặc dịch sang tiếng Việt đoạn mã trên để anh em có thể hiểu mà áp dụng (nếu bị).
Đây là toàn bộ mã của mình
Function UpdatePO_1()
Dim SapGuiAuto, WScript, msgcol
Dim objGui As GuiApplication
Dim objConn As GuiConnection
Dim session As GuiSession
Set SapGuiAuto = GetObject("SAPGUI")
Set objGui = SapGuiAuto.GetScriptingEngine
Set objConn = objGui.Children(0)
Set session = objConn.Children(0)
Dim fileName2 As String
fileName2 = "UpdatePO.XLSX"
Dim G6 As String
G6 = "D:\HIEU MOI 2023\KHO 2023\DU_LIEU_KET_XUAT"

Đếm số lượng sổ làm việc excel đã mở và đặt nó thành biến trước khi chạy mã SAP
Dim appWorkbookCount As Long
appWorkbookCount = Application.Workbooks.Count

Application.DisplayAlerts = False
Application.ScreenUpdating = False

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

session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "ME2N"
session.findById("wnd[0]/tbar[0]/btn[0]").press

Dim i As Long
Dim dc_HangNgayA As Long
dc_HangNgayA = Workbooks("KHO_NVL_2024").Sheets("Hang Ngay").Cells(Rows.Count, 1).End(xlUp).Row
i = dc_HangNgayA

'Thay doi so PO
session.findById("wnd[0]/usr/ctxtEN_EBELN-LOW").Text = Workbooks("KHO_NVL_2024").Sheets("Hang Ngay").Range("B" & i).Value
session.findById("wnd[0]/tbar[1]/btn[8]").press

session.findById("wnd[0]/mbar/menu[0]/menu[3]/menu[1]").Select
session.findById("wnd[1]/tbar[0]/btn[0]").press


session.findById("wnd[1]").sendVKey 4

'VI TRI THAY DOI DIA CHI DUONG DAN LUU FILE
session.findById("wnd[2]/usr/ctxtDY_PATH").Text = G6
session.findById("wnd[2]/usr/ctxtDY_FILENAME").Text = "UpdatePO.XLSX"

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

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

'Back quay lai
session.findById("wnd[0]/tbar[0]/btn[3]").press
session.findById("wnd[0]/tbar[0]/btn[3]").press

Application.DisplayAlerts = True
Application.ScreenUpdating = True

Đoạn này thì dùng vòng lặp Do Loop While với DoEvents để làm cho tệp xuất từ SAP xuất hiện
Do
DoEvents
Loop While appWorkbookCount = Application.Workbooks.Count

Nhờ vòng lặp trên cho nên dễ dàng đặt tệp vừa xuất từ SAP này thành biến
Dim wb As Workbook, wbExport As Workbook
For Each wb In Application.Workbooks
If InStr(1, wb.Name, "UpdatePO") > 0 Then
Set wbExport = wb
End If
Next wb

UpdatePO_1 = "D:\HIEU MOI 2023\KHO 2023\DU_LIEU_KET_XUAT\" & fileName2

End Function
 
Upvote 0
Đây là toàn bộ mã của mình
Function UpdatePO_1()
Dim SapGuiAuto, WScript, msgcol
Dim objGui As GuiApplication
Dim objConn As GuiConnection
Dim session As GuiSession
Set SapGuiAuto = GetObject("SAPGUI")
Set objGui = SapGuiAuto.GetScriptingEngine
Set objConn = objGui.Children(0)
Set session = objConn.Children(0)
Dim fileName2 As String
fileName2 = "UpdatePO.XLSX"
Dim G6 As String
G6 = "D:\HIEU MOI 2023\KHO 2023\DU_LIEU_KET_XUAT"

Đếm số lượng sổ làm việc excel đã mở và đặt nó thành biến trước khi chạy mã SAP
Dim appWorkbookCount As Long
appWorkbookCount = Application.Workbooks.Count

Application.DisplayAlerts = False
Application.ScreenUpdating = False

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

session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "ME2N"
session.findById("wnd[0]/tbar[0]/btn[0]").press

Dim i As Long
Dim dc_HangNgayA As Long
dc_HangNgayA = Workbooks("KHO_NVL_2024").Sheets("Hang Ngay").Cells(Rows.Count, 1).End(xlUp).Row
i = dc_HangNgayA

'Thay doi so PO
session.findById("wnd[0]/usr/ctxtEN_EBELN-LOW").Text = Workbooks("KHO_NVL_2024").Sheets("Hang Ngay").Range("B" & i).Value
session.findById("wnd[0]/tbar[1]/btn[8]").press

session.findById("wnd[0]/mbar/menu[0]/menu[3]/menu[1]").Select
session.findById("wnd[1]/tbar[0]/btn[0]").press


session.findById("wnd[1]").sendVKey 4

'VI TRI THAY DOI DIA CHI DUONG DAN LUU FILE
session.findById("wnd[2]/usr/ctxtDY_PATH").Text = G6
session.findById("wnd[2]/usr/ctxtDY_FILENAME").Text = "UpdatePO.XLSX"

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

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

'Back quay lai
session.findById("wnd[0]/tbar[0]/btn[3]").press
session.findById("wnd[0]/tbar[0]/btn[3]").press

Application.DisplayAlerts = True
Application.ScreenUpdating = True

Đoạn này thì dùng vòng lặp Do Loop While với DoEvents để làm cho tệp xuất từ SAP xuất hiện
Do
DoEvents
Loop While appWorkbookCount = Application.Workbooks.Count

Nhờ vòng lặp trên cho nên dễ dàng đặt tệp vừa xuất từ SAP này thành biến
Dim wb As Workbook, wbExport As Workbook
For Each wb In Application.Workbooks
If InStr(1, wb.Name, "UpdatePO") > 0 Then
Set wbExport = wb
End If
Next wb

UpdatePO_1 = "D:\HIEU MOI 2023\KHO 2023\DU_LIEU_KET_XUAT\" & fileName2

End Function
Đổ danh sách PO ah bạn :D
 
Upvote 0
Làm SAP thì có 2 bộ cần thiết.
Một là kết xuất Excel.
Hai là kết xuất PDF bằng tcode PDF!
Mình vẫn cứ phân vân về vấn đề PDF, dùng Acrobat Reader thì kết xuất được. Nhưng nhược điểm là sau khi kết xuất PDF bằng Acrobat Reader thì in hàng loạt không được. Với Acrobat Reader khó cài lậu, dễ bị bắt bản quyền.

Ngược lại Foxit Reader thì có chức năng in hàng loạt PDF. Hiếm khi bắt bản quyền.
Nhưng mà cài Foxit Reader thì dùng VBA lại kết xuất không được.
Mình đang bị cái vòng lẩn quẩn này. Muốn in ra PDF bằng Foxit Reader mà không được.
Không biết bạn có biết vấn đề này không, chúng mình trao đổi một tí.
 
Upvote 0
Web KT

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

Back
Top Bottom