2017-03-03 308 views
0

長時間讀者,第一次發佈海報如何在Excel VBA宏期間打開從SAP調用的Excel電子表格

我有一個從xlsx格式的SAP導出生產報告的宏。事情是,我需要四條這樣的報告用於我們的四條生產線(A,B,C & D),但是當宏運行其過程時只有兩個或三個打印輸出(通常只有B,C,& D打印出來但有時只是C & D)。

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

下面是我正在運行的代碼的一個示例,該代碼將打開四行產品編號中的一個。我從Excel電子表格中抽取日期來過濾塑料盒或塑料卡車的過帳日期。我基本上只是重複三次「線數據收集」中的部分,並完成了我的宏。

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 

回答

0

我會測試目標文件是否已經存在。

例如:

'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