簡體   English   中英

如何在Excel VBA Macro期間打開從SAP調用的Excel電子表格

[英]How to open excel spreadsheet called from SAP during Excel VBA Macro

長期讀者,初次海報

我有一個宏,可以xlsx格式從SAP導出生產報告。 問題是,我需要為四個生產線(A,B,C和D)提供其中四個報告,但是當宏運行其過程時,僅打印兩三個(通常只有B,C和D可以打印,但是有時只是C&D)。

基本上,我正在尋找一種方法,以便從宏中的SAP導出excel電子表格時,它們會在生成后立即彈出,而不是等到最后並希望彈出四個。 是否存在某種允許這種情況發生的循環或延遲? 我知道SAP將它們保存到某個文件夾,所以我知道它們是從SAP導出的,但是在宏完成時它們不會彈出。

這是我正在運行的代碼的示例,該代碼將打開四個生產線的生產編號之一。 我從Excel電子表格中獲取日期,以過濾制造一箱或一卡車塑料的發布日期。 基本上,我只重復了“ A行數據收集”中的部分,重復了三次,就完成了我的宏。

Sub Get_SAP()
Dim App, Connection, session As Object

 Sheets("Sheet1").Select
 Range("B8").Select
Selection.Copy
 a_value = Range("B4").Text
 b_value = Range("B5").Text

'Open Up SAP on Screen'

 Set SapGuiAuto = GetObject("SAPGUI")
 Set App = SapGuiAuto.GetScriptingEngine
 Set Connection = App.Children(0)
 Set session = Connection.Children(0)

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

'A Line Data Gathering'

'Type in /ncooispi'

session.findById("wnd[0]/tbar[0]/okcd").Text = "/ncooispi"
session.findById("wnd[0]").sendVKey 0

'Type in search parameters in Cooispi'

session.findById("wnd[0]/usr/ssub%_SUBSCREEN_TOPBLOCK:PPIO_ENTRY:1100/cmbPPIO_ENTRY_SC1100-PPIO_LISTTYP").Key = "PPIOD000"
session.findById("wnd[0]/usr/ssub%_SUBSCREEN_TOPBLOCK:PPIO_ENTRY:1100/ctxtPPIO_ENTRY_SC1100-ALV_VARIANT").SetFocus
session.findById("wnd[0]/usr/ssub%_SUBSCREEN_TOPBLOCK:PPIO_ENTRY:1100/ctxtPPIO_ENTRY_SC1100-ALV_VARIANT").Text = "BRUCE-4"
session.findById("wnd[0]/usr/tabsTABSTRIP_SELBLOCK/tabpSEL_00/ssub%_SUBSCREEN_SELBLOCK:PPIO_ENTRY:1200/ctxtS_WERKS-LOW").Text = "AC55"
session.findById("wnd[0]/usr/tabsTABSTRIP_SELBLOCK/tabpSEL_00/ssub%_SUBSCREEN_SELBLOCK:PPIO_ENTRY:1200/ctxtS_PARBPL-LOW").Text = "A-Extruder"
session.findById("wnd[0]/usr/tabsTABSTRIP_SELBLOCK/tabpSEL_00/ssub%_SUBSCREEN_SELBLOCK:PPIO_ENTRY:1200/ctxtS_PARBPL-LOW").SetFocus
session.findById("wnd[0]/usr/tabsTABSTRIP_SELBLOCK/tabpSEL_00/ssub%_SUBSCREEN_SELBLOCK:PPIO_ENTRY:1200/ctxtS_PARBPL-LOW").caretPosition = 8
session.findById("wnd[0]/tbar[1]/btn[8]").press

session.findById("wnd[0]/usr/cntlCUSTOM/shellcont/shell/shellcont/shell").pressToolbarButton "&NAVIGATION_PROFILE_TOOLBAR_EXPAND"
session.findById("wnd[0]/usr/cntlCUSTOM/shellcont/shell/shellcont/shell").pressToolbarContextButton "&MB_VARIANT"
session.findById("wnd[0]/usr/cntlCUSTOM/shellcont/shell/shellcont/shell").selectContextMenuItem "&COL0"
session.findById("wnd[1]/usr/tabsG_TS_ALV/tabpALV_M_R3").Select
session.findById("wnd[1]/usr/tabsG_TS_ALV/tabpALV_M_R3/ssubSUB_DYN0510:SAPLSKBH:0600/cntlCONTAINER2_FILT/shellcont/shell").currentCellRow = 2
session.findById("wnd[1]/usr/tabsG_TS_ALV/tabpALV_M_R3/ssubSUB_DYN0510:SAPLSKBH:0600/cntlCONTAINER2_FILT/shellcont/shell").selectedRows = "2"
session.findById("wnd[1]/usr/tabsG_TS_ALV/tabpALV_M_R3/ssubSUB_DYN0510:SAPLSKBH:0600/btn600_BUTTON").press
session.findById("wnd[2]/usr/ssub%_SUBSCREEN_FREESEL:SAPLSSEL:1105/btn%_%%DYN003_%_APP_%-VALU_PUSH").press
session.findById("wnd[3]/usr/tabsTAB_STRIP/tabpINTL").Select
session.findById("wnd[3]/usr/tabsTAB_STRIP/tabpINTL/ssubSCREEN_HEADER:SAPLALDB:3020/tblSAPLALDBINTERVAL/ctxtRSCSEL_255-ILOW_I[1,0]").Text = ""
session.findById("wnd[3]").sendVKey 14
session.findById("wnd[3]/usr/tabsTAB_STRIP/tabpINTL/ssubSCREEN_HEADER:SAPLALDB:3020/tblSAPLALDBINTERVAL/ctxtRSCSEL_255-IHIGH_I[2,0]").Text = ""
session.findById("wnd[3]").sendVKey 14

'Plug numbers from Excel into Posting Date Filters'
session.findById("wnd[3]/usr/tabsTAB_STRIP/tabpINTL/ssubSCREEN_HEADER:SAPLALDB:3020/tblSAPLALDBINTERVAL/ctxtRSCSEL_255-ILOW_I[1,0]").Text = a_value
session.findById("wnd[3]/usr/tabsTAB_STRIP/tabpINTL/ssubSCREEN_HEADER:SAPLALDB:3020/tblSAPLALDBINTERVAL/ctxtRSCSEL_255-IHIGH_I[2,0]").Text = b_value

'Get A Line spreadsheet'

session.findById("wnd[3]/tbar[0]/btn[8]").press
session.findById("wnd[2]/tbar[0]/btn[0]").press
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[0]/usr/cntlCUSTOM/shellcont/shell/shellcont/shell").pressToolbarContextButton "&MB_EXPORT"
session.findById("wnd[0]/usr/cntlCUSTOM/shellcont/shell/shellcont/shell").selectContextMenuItem "&XXL"    session.findById("wnd[1]/tbar[0]/btn[0]").press
 session.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = "ALINEPRODUCTION.XLSX"
 session.findById("wnd[1]/usr/ctxtDY_FILENAME").caretPosition = 16
 session.findById("wnd[1]/tbar[0]/btn[11]").press

 Sub End

我將測試該文件是否已在目標位置。

例如:

'Get A Line spreadsheet'

session.findById("wnd[3]/tbar[0]/btn[8]").press
session.findById("wnd[2]/tbar[0]/btn[0]").press
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[0]/usr/cntlCUSTOM/shellcont/shell/shellcont/shell").pressToolbarContextButton "&MB_EXPORT"
session.findById("wnd [0]/usr/cntlCUSTOM/shellcont/shell/shellcont/shell").selectContextMenuItem "&XXL"    session.findById("wnd[1]/tbar[0]/btn[0]").press

'-------------- new -----------------------------------------------------
Set fso = CreateObject("Scripting.FileSystemObject")
File_Name = "c:\tmp\ALINEPRODUCTION.XLSX"
If fso.fileExists(File_Name) Then
  Set myfile = fso.GetFile(File_Name) 
  myfile.Delete
end if
'--------------- new -----------------------------------------------------

session.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = "ALINEPRODUCTION.XLSX"
session.findById("wnd[1]/usr/ctxtDY_FILENAME").caretPosition = 16
session.findById("wnd[1]/tbar[0]/btn[11]").press
'---------------- new ----------------------------------------------------
do    
  if fso.fileExists(File_Name) Then Exit do
  Application.Wait (Now + TimeValue("0:00:01"))
loop

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM