【问题标题】:How to open excel spreadsheet called from SAP during Excel VBA Macro如何在 Excel VBA 宏期间打开从 SAP 调用的 Excel 电子表格
【发布时间】:2017-07-22 22:50:24
【问题描述】:

老读者,第一次发帖

我有一个宏可以从 SAP 以 xlsx 格式导出生产报告。问题是,对于我们的四条生产线(A、B、C 和 D),我需要其中的四份报告,但是当宏运行时,只打印出两三个(通常只打印出​​ B、C 和 D,但有时只是 C & D)。

基本上,我正在寻找一种方法,以便当 Excel 电子表格从宏中的 SAP 导出时,它们一生成就会弹出,而不是等到最后并希望四个弹出。是否有某种循环或延迟会允许这种情况发生?我知道 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

【问题讨论】:

    标签: vba excel sap


    【解决方案1】:

    我会测试该文件是否已经存在于目的地。

    例如:

    '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
    

    【讨论】:

      猜你喜欢
      • 2013-06-15
      • 1970-01-01
      • 2010-11-08
      • 2011-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多