2017-12-06 4 views
1

Ich habe ein Skript, das ich zusammengestellt, das Massenlieferungen in SAP über VBA abschließt. Am Ende jeder abgeschlossenen Lieferung möchte ich, dass SAP die fertige Seite als Bestätigung ausdruckt.Drucken von SAP über VBA

Sub STOMacro() 

Dim App, Connection, session As Object 
Set SapGuiAuto = GetObject("SAPGUI") 
Set App = SapGuiAuto.GetScriptingEngine 
Set Connection = App.Children(0) 
Set session = Connection.Children(0) 


If session Is Nothing Then 
    Set session = Connection.Children(Int(ses)) 
End If 

If MsgBox("Are you sure you want to acknowledge these STOs?", vbYesNo, "Complete STOs?") = vbNo Then 
      Exit Sub 
End If 

OrderCounter = Range("A:A").Find("*", Range("A64999"), xlValues, xlWhole, xlByRows, xlPrevious).Row 

For i = 1 To OrderCounter 

Application.DisplayAlerts = False 


STO = Range("A" & i).Value 

Application.StatusBar = "Acknowledging STO " & i & " out of " & OrderCounter 

session.findById("wnd[0]").maximize 
session.findById("wnd[0]/tbar[0]/okcd").Text = "/nzvmonitor" 
session.findById("wnd[0]").sendVKey 0 
session.findById("wnd[0]/tbar[1]/btn[17]").press 
session.findById("wnd[1]/usr/txtV-LOW").Text = "STOPrint" 
session.findById("wnd[1]/usr/txtENAME-LOW").Text = "" 
session.findById("wnd[1]/usr/txtV-LOW").CaretPosition = 14 
session.findById("wnd[1]/tbar[0]/btn[8]").press 
session.findById("wnd[0]/usr/ctxtS_DLVRY-LOW").Text = "" & STO & "" 
session.findById("wnd[0]/usr/ctxtS_DLVRY-LOW").SetFocus 
session.findById("wnd[0]/usr/ctxtS_DLVRY-LOW").CaretPosition = 10 
session.findById("wnd[0]").sendVKey 8 
session.findById("wnd[0]/usr/cntlZVR_OMONITOR_C1/shellcont/shell").currentCellColumn = "" 
session.findById("wnd[0]/usr/cntlZVR_OMONITOR_C1/shellcont/shell").selectedRows = "0" 
session.findById("wnd[0]/usr/cntlZVR_OMONITOR_C1/shellcont/shell").pressToolbarButton "RCPT" 
session.findById("wnd[0]").sendVKey 3 
session.findById("wnd[1]/usr/btnBUTTON_1").press 
session.findById("wnd[1]").sendVKey 0 
session.findById("wnd[0]/usr/cntlZVR_OMONITOR_C1/shellcont/shell").pressToolbarButton "&PRINT_BACK" 
session.findById("wnd[1]").sendVKey 0 
session.findById("wnd[1]").sendVKey 13 
'This is where the print dialogue pops up but I can't interact with it 

Next i 
MsgBox ("All STOs acknowledged and printed.") 
Application.StatusBar = "" 


End Sub 

Ich kann SAP erhalte das Druckdialogfeld zu öffnen, aber der Benutzer hat immer noch manuell „ok“, um klicken, um tatsächlich die Seiten gedruckt werden. Das ist eine kleine Unannehmlichkeit, aber ich frage mich, ob es könnte. Print dialogue

Wenn überhaupt, ich bin fein mit nur Tastaturbefehlen mit dem Druckdialog machen bekommen {Enter}, um es geschickt, aber ich weiß nicht, wie SAP Haken auf das Feld, um den Befehl zu senden.

Antwort

0

Seit vielen Jahren haben wir das folgende Programm-Code in einem ähnlichen Ort unter Verwendung von:

. . . 
dim Wshell as Object 

set Wshell = CreateObject("WScript.Shell") 

on error resume next 
Do 
bWindowFound = Wshell.AppActivate("Print") 
Application.Wait (Now + TimeValue("0:00:01")) 
Loop Until bWindowFound 

bWindowFound = Wshell.AppActivate("Print") 
if (bWindowFound) Then 
Wshell.appActivate "Print" 
Application.Wait (Now + TimeValue("0:00:01")) 
Wshell.sendkeys "{ENTER}" 
end if 

bWindowFound = Wshell.AppActivate("Print") 
if (bWindowFound) Then 
Wshell.appActivate "Print" 
Application.Wait (Now + TimeValue("0:00:01")) 
Wshell.sendkeys "{TAB}{ENTER}" 
end if 

bWindowFound = Wshell.AppActivate("Print") 
if (bWindowFound) Then 
Wshell.appActivate "Print" 
Application.Wait (Now + TimeValue("0:00:01")) 
Wshell.sendkeys "{TAB}{TAB}{ENTER}" 
end if 
'It could be superfluous under certain circumstances. 
session.findById("wnd[1]").Close 

Application.Wait (Now + TimeValue("0:00:01")) 

on error goto 0 
. . . 

Aber da man nicht wissen kann, wo sich der Cursor derzeit alle Möglichkeiten durchgeführt befindet. Aber wenn du es weißt, könntest du etwas auslassen.

Grüße, ScriptMan

+0

Arbeitete perfekt! Vielen Dank! – VomittingDiary