【问题标题】:Error While Saving XLSX in SAP through macro通过宏在 SAP 中保存 XLSX 时出错
【发布时间】:2021-01-08 04:36:14
【问题描述】:

我正在尝试将 XLXS 文件从 SAP 保存到我的文档中,但它在允许中显示错误,当我尝试记录和运行时,允许的代码也不起作用。我也在尝试循环变量 "conta" 。请帮助我在这种情况下如何在不单击允许和循环“conta”变量的情况下保存文件。 Senkey 选项不适用于这些宏。

Sub KSB1_Multiple_CA()

Application.ScreenUpdating = False
Application.DisplayAlerts = False

Set ws = Sheets("SAP")
Sheets("SAP").Select
rang = Range("A" & Rows.Count).End(xlUp).Row + 1
Range("A2:AO" & rang).Clear

If ActiveSheet.AutoFilterMode Then
    ActiveSheet.AutoFilterMode = False
End If

rang = Sheets("SAP").Range("A" & Rows.Count).End(xlUp).Row
bl = ThisWorkbook.Name
conta = ThisWorkbook.Sheets("Details").Range("A2")
dt1 = ThisWorkbook.Sheets("Details").Range("D2")
dt2 = ThisWorkbook.Sheets("Details").Range("E2")
vari = ThisWorkbook.Sheets("Details").Range("F2")
ccs = Sheets("Details").Range("B" & Rows.Count).End(xlUp).Row + 1
ces = Sheets("Details").Range("C" & Rows.Count).End(xlUp).Row + 1

Set SapGuiAuto = GetObject("SAPGUI")
Set App = SapGuiAuto.GetScriptingEngine
Set Connection = App.Children(0)
Set session = Connection.Children(0)

'Code SAP Start dont modify'
Windows(bl).Activate

On Error Resume Next
session.StartTransaction "KSB1"
session.findById("wnd[0]/usr/ctxtP_KOKRS").Text = conta
session.findById("wnd[0]/usr/ctxtP_KOKRS").caretPosition = 4
session.findById("wnd[0]").sendVKey 0
Sheets("Details").Select
Range("B2:B" & ccs).Copy
session.findById("wnd[0]/usr/btn%_KOSTL_%_APP_%-VALU_PUSH").press
session.findById("wnd[1]/tbar[0]/btn[16]").press
session.findById("wnd[1]/tbar[0]/btn[24]").press
session.findById("wnd[1]/tbar[0]/btn[8]").press
session.findById("wnd[0]/usr/ctxtKSTGR").Text = ""
session.findById("wnd[0]/usr/ctxtKSTGR").SetFocus
session.findById("wnd[0]/usr/ctxtKSTGR").caretPosition = 0
Sheets("Details").Select
Range("C2:C" & ces).Copy
session.findById("wnd[0]/usr/btn%_KSTAR_%_APP_%-VALU_PUSH").press
session.findById("wnd[1]/tbar[0]/btn[16]").press
session.findById("wnd[1]/tbar[0]/btn[24]").press
session.findById("wnd[1]/tbar[0]/btn[8]").press
session.findById("wnd[0]/usr/ctxtR_BUDAT-LOW").Text = dt1
session.findById("wnd[0]/usr/ctxtR_BUDAT-HIGH").Text = dt2
session.findById("wnd[0]/usr/ctxtP_DISVAR").Text = vari
session.findById("wnd[0]/usr/ctxtP_DISVAR").SetFocus
session.findById("wnd[0]/usr/ctxtP_DISVAR").caretPosition = 8
session.findById("wnd[0]/usr/btnBUT1").press
session.findById("wnd[1]/usr/txtKAEP_SETT-MAXSEL").Text = "5000000"
session.findById("wnd[1]/usr/txtKAEP_SETT-MAXSEL").caretPosition = 7
session.findById("wnd[1]").sendVKey 0
session.findById("wnd[0]/tbar[1]/btn[8]").press

On Error Resume Next
session.findById("wnd[1]").sendVKey 0
On Error GoTo 0

session.findById("wnd[0]/mbar/menu[0]/menu[3]/menu[1]").Select
session.findById("wnd[1]").sendVKey 0
session.findById("wnd[1]/usr/ctxtDY_PATH").Text = "C:\"
session.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = "AT01.xlsx"
session.findById("wnd[1]/usr/ctxtDY_PATH").SetFocus
session.findById("wnd[1]/usr/ctxtDY_PATH").caretPosition = 86
session.findById("wnd[1]").sendVKey 0



'Code SAP Ends dont modify'

rang = Range("A" & Rows.Count).End(xlUp).Row + 1
Range("A2:AE" & rang).Copy

Windows(bl).Activate
ws.Select
Lastrow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1
Range("A" & Lastrow).Select
Selection.PasteSpecial xlValues

'Code SAP Start dont modify'
session.findById("wnd[1]/tbar[0]/btn[0]").press
'Code SAP End dont modify'

ActiveWindow.WindowState = xlMaximized

Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub

【问题讨论】:

标签: excel vba sap-gui


【解决方案1】:

以下程序结构允许您从 SAP 创建 Excel 文件,然后对其进行编辑。

例如:

Public myFileName as String

Sub KSB1_Multiple_CA()
. . .

. . .
session.findById("wnd[0]/mbar/menu[0]/menu[3]/menu[1]").Select
session.findById("wnd[1]").sendVKey 0
session.findById("wnd[1]/usr/ctxtDY_PATH").Text = "C:\"
session.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = "AT01.xlsx"
'session.findById("wnd[1]/usr/ctxtDY_PATH").SetFocus
'session.findById("wnd[1]/usr/ctxtDY_PATH").caretPosition = 86
'session.findById("wnd[1]").sendVKey 0
session.findById("wnd[1]/tbar[0]/btn[11]").press
session.findById("wnd[0]/tbar[0]/btn[3]").press
session.findById("wnd[1]/usr/btnSPOP-OPTION1").press

myFileName = "AT01.xlsx"

Set wshell = CreateObject("Wscript.Shell")
wshell.Run "c:\tmp\Run_NextSub.vbs" & " " & Chr(34) & ThisWorkbook.Name & Chr(34) & " " & Chr(34) & myFileName & Chr(34)

End Sub    

Sub NextSub()
Workbooks(myFileName).Activate

rang = Range("A" & Rows.Count).End(xlUp).Row + 1
Range("A2:AE" & rang).Copy

ThisWorkbook.Activate
Sheets("SAP").Select

Lastrow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1
Range("A" & Lastrow).Select
Selection.PasteSpecial xlValues

Application.DisplayAlerts = False
Workbooks(myFileName).Activate
ActiveWorkbook.Close

ThisWorkbook.Activate

Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

Run_NextSub.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) & "'" & "!NextSub"

问候,脚本人

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
  • 2022-12-16
  • 2020-10-16
相关资源
最近更新 更多