[英]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.