Ошибка при сохранении XLSX в SAP через макрос - PullRequest
0 голосов
/ 16 февраля 2020

Я пытаюсь сохранить файл XLXS из SAP в моем документе, но в Allow отображается ошибка, и при попытке записать и запустить также код для allow не работает. Также я пытаюсь L oop Переменная "контакт". Пожалуйста, помогите, как я могу в этом случае сохранить файл, не нажимая на кнопку разрешения и переменную l oop "conta". Опции Senkey не работают с этими макросами.

SAP Error for Saving file

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

1 Ответ

0 голосов
/ 25 февраля 2020

Следующая конструкция программы позволяет вам создать файл Excel из SAP и затем отредактировать его.

, например:

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"

С уважением, ScriptMan

...