通过 VBA 将 SAP 完全导出到 excel
Export SAP to excel completely via VBA
我希望你能帮助我完成下面的代码。我正在尝试每天通过 VBA 使用记录的 SAP GUI 脚本从 SAP 导出报告。随后我想将数据复制到另一个工作簿并用它做一些 reformatting/calculations 。但是,excel 导出文件只有在我完全完成我的宏后才会打开。
例如使用 ShellAndWait http://www.cpearson.com/excel/ShellAndWait.aspx 假设它是一个外部应用程序,但我想找到一个解决方案,我可以将所有内容保存在一个文件中。
在此先感谢您的帮助!
编辑:已解决!感谢编剧。
出口投资
Public Sub ExportInvest()
Dim Today As String
Dim FileName As String
Dim Ret
Today = Format$(DateTime.Now, "yyyymmdd__hh-MM-ss")
FileName = "Invest_" & Today & ".xml"
Set SapGuiAuto = GetObject("SAPGUI") 'Get the SAP GUI Scripting object
Set SAPApp = SapGuiAuto.GetScriptingEngine 'Get the currently running SAP GUI
Set SAPCon = SAPApp.Children(0) 'Get the first system that is currently connected
Set session = SAPCon.Children(0) 'Get the first session (window) on that connection
session.findById("wnd[0]/tbar[0]/okcd").Text = "/nzx03"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/tbar[1]/btn[17]").press
session.findById("wnd[1]/usr/txtENAME-LOW").Text = "TXO4074"
session.findById("wnd[1]/usr/txtENAME-LOW").SetFocus
session.findById("wnd[1]/tbar[0]/btn[8]").press
session.findById("wnd[0]/tbar[1]/btn[8]").press
session.findById("wnd[0]/mbar/menu[0]/menu[1]/menu[1]").Select
session.findById("wnd[1]/usr/ctxtDY_PATH").Text = "S:\FL_DMA\SAP Scripts\test\backup"
session.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = FileName
session.findById("wnd[1]/tbar[0]/btn[0]").press
Set wshell = CreateObject("Wscript.Shell")
wshell.Run "C:\Users\txo4074\Documents\Projects\SAPscriptINVEST\myTest.vbs" & " " & "999Invest.xlsm" & " " & FileName
End Sub
MyTest.vbs
set xclapp = getObject(,"Excel.Application")
on error resume next
do
err.clear
Set xclwbk = xclApp.Workbooks.Item(wscript.arguments(1))
If Err.Number = 0 Then exit do
wscript.sleep 2000
loop
on error goto 0
xclapp.Run wscript.arguments(0) & "!ThisWorkbook.ExportInvest_1"
ExportInvest_1
Sub ExportInvest_1()
FileName = NewestFile("S:\FL_DMA\SAP Scripts\test\backup", "****")
Workbooks(Left(FileName, 25)).Worksheets(1).Activate
Range("A2:K100").Select
Selection.Copy ThisWorkbook.Worksheets("Input").Range("A2:K100")
Workbooks(Left(FileName, 25)).Close
ThisWorkbook.Activate
End Sub
我会这样解决:
出口投资:(在 myTest.xlsm)
. . .
session.findById("wnd[1]/usr/ctxtDY_PATH").Text = "S:\FL_DMA\SAP Scripts\test\backup"
session.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = FileName
session.findById("wnd[1]/tbar[0]/btn[0]").press
'new commands
Set wshell = CreateObject("Wscript.Shell")
wshell.Run "c:\tmp\myTest.vbs" & " " & "myTest.xlsm"
End Sub
myTest.vbs:
set xclapp = getObject(,"Excel.Application")
xclapp.Run wscript.arguments(0) & "!ExportInvest_1"
ExportInvest_1:(在myTest.xlsm)
Sub ExportInvets_1()
Dim Today as String
Today = Format$(DateTime.Now, "yyyymmdd__hh-MM-ss")
MsgBox "file open", vbOKOnly, ""
Workbooks("Invest_" & Today).Activate
Worksheets(1).Range("A2:K100").Select
Selection.Copy ThisWorkbook.Worksheets("Input").Range("A2:K100")
End Sub
此致,
脚本人
抱歉,我的测试只使用了少量数据。因此,现在必须将扩建纳入拟议的建设。
例如:
出口投资:(在 myTest.xlsm)
. . .
'Dim FileName As String
. . .
session.findById("wnd[1]/usr/ctxtDY_PATH").Text = "S:\FL_DMA\SAP Scripts\test\backup"
session.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = FileName
session.findById("wnd[1]/tbar[0]/btn[0]").press
Set wshell = CreateObject("Wscript.Shell")
'-----------------------------------------new
wshell.Run "c:\tmp\myTest.vbs" & " " & "myTest.xlsm" & " " & FileName
'-----------------------------------------new
End Sub
myTest.vbs:
set xclapp = getObject(,"Excel.Application")
'-----------------------------------------new
on error resume next
do
err.clear
Set xclwbk = xclApp.Workbooks.Item(wscript.arguments(1))
If Err.Number = 0 Then exit do
wscript.sleep 2000
loop
on error goto 0
'-----------------------------------------new
xclapp.Run wscript.arguments(0) & "!ExportInvest_1"
ExportInvest_1:(在myTest.xlsm)
Public FileName as String
Sub ExportInvets_1()
'Dim Today as String
'Today = Format$(DateTime.Now, "yyyymmdd__hh-MM-ss")
MsgBox "file open", vbOKOnly, ""
Workbooks(FileName).Activate
Worksheets(1).Range("A2:K100").Select
Selection.Copy ThisWorkbook.Worksheets("Input").Range("A2:K100")
End Sub
问候,ScriptMan
我希望你能帮助我完成下面的代码。我正在尝试每天通过 VBA 使用记录的 SAP GUI 脚本从 SAP 导出报告。随后我想将数据复制到另一个工作簿并用它做一些 reformatting/calculations 。但是,excel 导出文件只有在我完全完成我的宏后才会打开。
例如使用 ShellAndWait http://www.cpearson.com/excel/ShellAndWait.aspx 假设它是一个外部应用程序,但我想找到一个解决方案,我可以将所有内容保存在一个文件中。
在此先感谢您的帮助!
编辑:已解决!感谢编剧。
出口投资
Public Sub ExportInvest()
Dim Today As String
Dim FileName As String
Dim Ret
Today = Format$(DateTime.Now, "yyyymmdd__hh-MM-ss")
FileName = "Invest_" & Today & ".xml"
Set SapGuiAuto = GetObject("SAPGUI") 'Get the SAP GUI Scripting object
Set SAPApp = SapGuiAuto.GetScriptingEngine 'Get the currently running SAP GUI
Set SAPCon = SAPApp.Children(0) 'Get the first system that is currently connected
Set session = SAPCon.Children(0) 'Get the first session (window) on that connection
session.findById("wnd[0]/tbar[0]/okcd").Text = "/nzx03"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/tbar[1]/btn[17]").press
session.findById("wnd[1]/usr/txtENAME-LOW").Text = "TXO4074"
session.findById("wnd[1]/usr/txtENAME-LOW").SetFocus
session.findById("wnd[1]/tbar[0]/btn[8]").press
session.findById("wnd[0]/tbar[1]/btn[8]").press
session.findById("wnd[0]/mbar/menu[0]/menu[1]/menu[1]").Select
session.findById("wnd[1]/usr/ctxtDY_PATH").Text = "S:\FL_DMA\SAP Scripts\test\backup"
session.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = FileName
session.findById("wnd[1]/tbar[0]/btn[0]").press
Set wshell = CreateObject("Wscript.Shell")
wshell.Run "C:\Users\txo4074\Documents\Projects\SAPscriptINVEST\myTest.vbs" & " " & "999Invest.xlsm" & " " & FileName
End Sub
MyTest.vbs
set xclapp = getObject(,"Excel.Application")
on error resume next
do
err.clear
Set xclwbk = xclApp.Workbooks.Item(wscript.arguments(1))
If Err.Number = 0 Then exit do
wscript.sleep 2000
loop
on error goto 0
xclapp.Run wscript.arguments(0) & "!ThisWorkbook.ExportInvest_1"
ExportInvest_1
Sub ExportInvest_1()
FileName = NewestFile("S:\FL_DMA\SAP Scripts\test\backup", "****")
Workbooks(Left(FileName, 25)).Worksheets(1).Activate
Range("A2:K100").Select
Selection.Copy ThisWorkbook.Worksheets("Input").Range("A2:K100")
Workbooks(Left(FileName, 25)).Close
ThisWorkbook.Activate
End Sub
我会这样解决:
出口投资:(在 myTest.xlsm)
. . .
session.findById("wnd[1]/usr/ctxtDY_PATH").Text = "S:\FL_DMA\SAP Scripts\test\backup"
session.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = FileName
session.findById("wnd[1]/tbar[0]/btn[0]").press
'new commands
Set wshell = CreateObject("Wscript.Shell")
wshell.Run "c:\tmp\myTest.vbs" & " " & "myTest.xlsm"
End Sub
myTest.vbs:
set xclapp = getObject(,"Excel.Application")
xclapp.Run wscript.arguments(0) & "!ExportInvest_1"
ExportInvest_1:(在myTest.xlsm)
Sub ExportInvets_1()
Dim Today as String
Today = Format$(DateTime.Now, "yyyymmdd__hh-MM-ss")
MsgBox "file open", vbOKOnly, ""
Workbooks("Invest_" & Today).Activate
Worksheets(1).Range("A2:K100").Select
Selection.Copy ThisWorkbook.Worksheets("Input").Range("A2:K100")
End Sub
此致, 脚本人
抱歉,我的测试只使用了少量数据。因此,现在必须将扩建纳入拟议的建设。
例如:
出口投资:(在 myTest.xlsm)
. . .
'Dim FileName As String
. . .
session.findById("wnd[1]/usr/ctxtDY_PATH").Text = "S:\FL_DMA\SAP Scripts\test\backup"
session.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = FileName
session.findById("wnd[1]/tbar[0]/btn[0]").press
Set wshell = CreateObject("Wscript.Shell")
'-----------------------------------------new
wshell.Run "c:\tmp\myTest.vbs" & " " & "myTest.xlsm" & " " & FileName
'-----------------------------------------new
End Sub
myTest.vbs:
set xclapp = getObject(,"Excel.Application")
'-----------------------------------------new
on error resume next
do
err.clear
Set xclwbk = xclApp.Workbooks.Item(wscript.arguments(1))
If Err.Number = 0 Then exit do
wscript.sleep 2000
loop
on error goto 0
'-----------------------------------------new
xclapp.Run wscript.arguments(0) & "!ExportInvest_1"
ExportInvest_1:(在myTest.xlsm)
Public FileName as String
Sub ExportInvets_1()
'Dim Today as String
'Today = Format$(DateTime.Now, "yyyymmdd__hh-MM-ss")
MsgBox "file open", vbOKOnly, ""
Workbooks(FileName).Activate
Worksheets(1).Range("A2:K100").Select
Selection.Copy ThisWorkbook.Worksheets("Input").Range("A2:K100")
End Sub
问候,ScriptMan