簡體   English   中英

如何將表格從 SAP GUI 復制到 Excel 中的一張表

[英]How to copy table from SAP GUI to one sheet in Excel

我在 SAP GUI 中有一個GuiGridView object,如下圖所示。 我可以使用 function 在 SAP GUI 中通過 VBA SAP GUI 腳本下載到 Excel,但速度很慢。

我想通過操作 Select 所有行將數據從 SAP GUI window 直接復制到 Excel 文件的工作表中,復制和粘貼,但 SAP GUI 腳本記錄器不記錄這些操作。

請幫我寫這段代碼。

在此處輸入圖像描述

Sub Test()

    Windows("Mod-Telit.xlsm").Activate
    Sheets("Put away").Select
    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 sApplication, "on"
    End If
    
    session.findById("wnd[0]").maximize
    session.findById("wnd[0]/tbar[0]/okcd").Text = "/ncoois"   ' T-code Coois
    session.findById("wnd[0]").sendVKey 0
    session.findById("wnd[0]/usr/ssub%_SUBSCREEN_TOPBLOCK:PPIO_ENTRY:1100/cmbPPIO_ENTRY_SC1100-PPIO_LISTTYP").Key = "PPIOM000"
    session.findById("wnd[0]/usr/ssub%_SUBSCREEN_TOPBLOCK:PPIO_ENTRY:1100/ctxtPPIO_ENTRY_SC1100-ALV_VARIANT").Text = "/V1517171"  ' Select layout
    session.findById("wnd[0]/usr/tabsTABSTRIP_SELBLOCK/tabpSEL_00/ssub%_SUBSCREEN_SELBLOCK:PPIO_ENTRY:1200/ctxtS_AUFNR-LOW").Text = Workbooks("Mod-Telit.xlsm").Sheets("Put away").Range("B3") ' PON number in excel
    session.findById("wnd[0]/usr/tabsTABSTRIP_SELBLOCK/tabpSEL_00/ssub%_SUBSCREEN_SELBLOCK:PPIO_ENTRY:1200/ctxtS_AUFNR-LOW").SetFocus
    session.findById("wnd[0]/tbar[1]/btn[8]").press
    
    session.findById("wnd[0]").maximize
    session.findById("wnd[0]/usr/cntlGRID_0100/shellcont/shell").setCurrentCell -1, ""
    session.findById("wnd[0]/usr/cntlGRID_0100/shellcont/shell").SelectAll

    ***' Next is code copy*** ????????

    Windows("Mod-Telit.xlsm").Activate
    Sheets("Sheet1").Select
    Range("A1").Select
    ActiveSheet.Paste

End Sub

這是我用來替換復制/粘貼過程的一些代碼。

Set myGrid = session.findbyID("wnd[0]/usr/cntlGRID1/shellcont/shell")
allRows = myGrid.RowCount - 1 'number of SAP rows
allCols = myGrid.ColumnCount - 1 'number of SAP Columns
Dim columns As Object
Set columns = myGrid.ColumnOrder 'SAP column names in order in SAP window


 For j = 0 To allRows
 myGrid.firstVisibleRow = j
  For i = 0 To allCols
   ActiveSheet.Cells(j + 1, i + 1).Value = myGrid.GetCellValue(j, columns(i)) 'starts in cell "A1"
  Next i
 Next j

有大量數據會減慢速度,但可以完成工作。 可以先嘗試將信息設置為數組,我會稍微加快代碼速度,但它從 SAP 的傳輸會隨着數據的增多而減慢。

你能提供完整的代碼嗎?

暫無
暫無

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

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