我正在嘗試構建一個 Excel VBA 腳本,該腳本通過 Excel 作業表運行并從 SAP 系統中提取報告并將它們放在特定檔案夾中。引數從 A10 和 B10 開始,它們被放在 SAP 螢屏欄位中,在該欄位中創建報告并將其下載到我桌面上的檔案夾中。請在下面查看 Excel 作業表示例和 SAP 螢屏截圖以及我正在使用的代碼。
該腳本適用于第一個引數 A10 和 B10(它從 SAP 系統中提取報告并將其放在所需的檔案夾中)但是我想回圈腳本以自動提取 A10 和 B10 及以后的其他引數的報告 (Loop Until ActiveCell.Value = "")
有人可以幫我弄這個嗎?我在哪里以及如何放置回圈?


編碼:
'Declaring variables for sub procedures
Option Explicit
Public SapGuiAuto, WScript, msgcol
Public objGui As GuiApplication
Public objConn As GuiConnection
Public session As GuiSession
'Creating sub procedure
Sub SAPCustomerReport()
'Pointing object variables to SAP session
Set SapGuiAuto = GetObject("SAPGUI")
Set objGui = SapGuiAuto.GetScriptingEngine
Set objConn = objGui.Children(0)
Set session = objConn.Children(0)
Dim Vendor As String
Dim CoCo As String
Dim FolderPath As String
Dim SAPOutputLayout As String
Vendor = ActiveWorkbook.ActiveSheet.Range("A10")
CoCo = ActiveWorkbook.ActiveSheet.Range("B10")
FolderPath = ActiveWorkbook.ActiveSheet.Range("B3")
SAPOutputLayout = ActiveWorkbook.ActiveSheet.Range("B4")
'Recorded SAP Script here
session.FindById("wnd[0]").Maximize
session.FindById("wnd[0]/tbar[0]/okcd").Text = "/nFBL1N"
session.FindById("wnd[0]").SendVKey 0
session.FindById("wnd[0]/usr/chkX_SHBV").Selected = True
session.FindById("wnd[0]/usr/chkX_MERK").Selected = True
session.FindById("wnd[0]/usr/chkX_PARK").Selected = True
session.FindById("wnd[0]/usr/ctxtKD_LIFNR-LOW").Text = Vendor
session.FindById("wnd[0]/usr/ctxtKD_BUKRS-LOW").Text = CoCo
session.FindById("wnd[0]/usr/ctxtPA_VARI").Text = SAPOutputLayout
session.FindById("wnd[0]/usr/ctxtPA_VARI").SetFocus
session.FindById("wnd[0]/usr/ctxtPA_VARI").CaretPosition = 12
session.FindById("wnd[0]/tbar[1]/btn[8]").Press
session.FindById("wnd[0]/mbar/menu[0]/menu[3]/menu[1]").Select
session.FindById("wnd[1]/usr/ctxtDY_PATH").Text = FolderPath
session.FindById("wnd[1]/usr/ctxtDY_FILENAME").Text = Vendor & CoCo & ".XLSX"
session.FindById("wnd[1]/usr/ctxtDY_FILENAME").CaretPosition = 4
session.FindById("wnd[1]/tbar[0]/btn[11]").Press
MsgBox "Script Completed."
End Sub
uj5u.com熱心網友回復:
解決方案可能如下所示:
Sub SAPCustomerReport()
...
Recorded SAP Script here
i = 10
do
session.FindById("wnd[0]").Maximize
session.FindById("wnd[0]/tbar[0]/okcd").Text = "/nFBL1N"
...
session.FindById("wnd[1]/tbar[0]/btn[11]").Press
i = i 1
Vendor = ActiveWorkbook.ActiveSheet.Range("A" & cstr(i))
CoCo = ActiveWorkbook.ActiveSheet.Range("B" & cstr(i))
loop until Vendor = ""
MsgBox "Script Completed."
End Sub
問候, ScriptMan
uj5u.com熱心網友回復:
您應該將代碼拆分為迭代配置的例程,以及將供應商和 CoCo 作為輸入并創建報告的例程。
此外,我建議將您的配置 (A9:B12) 格式化為表格(功能區:插入 > 表格),然后您可以在 VBA 中使用串列物件 - 這在范圍等方面更容易處理。我將表格命名為“tblSAPReports”。
Option Explicit
Sub createAllReports()
Dim lo As ListObject
Set lo = ThisWorkbook.Worksheets("Table1").ListObjects("tblSAPReports") 'adjust to your needs
Dim lr As ListRow
Dim Vendor As String, CoCo As String
For Each lr In lo.ListRows
Vendor = lr.Range(1, 1): CoCo = lr.Range(1, 2)
SAPCustomerReport Vendor, CoCo
Next
End Sub
Public Sub SAPCustomerReport(Vendor As String, CoCo As String)
'your code
'but remove Vendor and CoCo variable and the setting of the variables
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/330828.html
上一篇:兩次使用“TextToColumns”時不需要的更改
下一篇:ExcelVba陣列不重新填充
