提问人:sephiroth 提问时间:10/4/2023 最后编辑:Storaxsephiroth 更新时间:10/5/2023 访问量:101
多屏幕 SAP Automation
SAP Automation on multiple screens
问:
我有一个关于在两个或多个屏幕中在SAP中运行VBA自动化的问题。 如果文本命中“1”,则脚本是否需要使用其他SAP屏幕来运行自动化。
If session.findById("wnd[0]/usr/txtBKPF-MONAT").Text = "1" Then
'Run FB03 in new sap screen, number 2 or any active 2nd screen
我在 YouTube 上看到了这个视频,但我找不到任何类似的指南。
https://www.youtube.com/watch?v=PvLq11HfCTc
这是我目前的代码。
If Not IsObject(SAPApp) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set SAPApp = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(SAPCon) Then
Set SAPCon = SAPApp.Children(0)
End If
If Not IsObject(session) Then
Set session = SAPCon.Children(0)
End If
If IsObject(WScript) Then
WScript.ConnectObject session, "on"
WScript.ConnectObject SAPApp, "on"
End If
Dim rng As Range
Dim cell As Range
Dim cell2 As Range
Dim rFirst As Range
Dim rLast As Range
Dim rSource As Range
Dim LastRow As Long
LastRow = ActiveWorkbook.ActiveSheet.Cells(Rows.Count, "E").End(xlUp).Row
For y = 12 To LastRow
Paymentdate = ActiveWorkbook.ActiveSheet.Range("E" & y).Value
'Period = Worksheets("Sheet1").Range("B3").Value
Paymentamt = ActiveWorkbook.ActiveSheet.Range("D" & y).Value
Assignment = ActiveWorkbook.ActiveSheet.Range("D7").Value
ActiveWorkbook.ActiveSheet.Range("H" & y).Formula = "=Trim(TRANSPOSE(TEXTSPLIT(G" & y & ",CHAR(44))))"
Columns("H:H").Select
Selection.Replace What:="@", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("H" & y).Select
session.findById("wnd[0]/tbar[0]/okcd").Text = "/NF-28"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/sub:SAPMF05A:0103/radRF05A-XPOS1[2,0]").Select
session.findById("wnd[0]/usr/ctxtBKPF-BLDAT").Text = Paymentdate
session.findById("wnd[0]/usr/ctxtBKPF-BLART").Text = "DZ"
session.findById("wnd[0]/usr/ctxtBKPF-BUKRS").Text = "ES01"
session.findById("wnd[0]/usr/ctxtBKPF-BUDAT").Text = Paymentdate
session.findById("wnd[0]/usr/txtBKPF-MONAT").SetFocus
If session.findById("wnd[0]/usr/txtBKPF-MONAT").Text = "1" Then
'Run FB03 in new sap screen, number 2 or any active 2nd screen
Else
session.findById("wnd[0]/usr/ctxtBKPF-WAERS").Text = "EUR"
session.findById("wnd[0]/usr/ctxtRF05A-KONTO").Text = "115117"
答:
-2赞
sephiroth
10/5/2023
#1
经过多次尝试,我终于找到了运行的解决方案,并通过从下面调用函数来选择第二个SAP窗口屏幕。还可以通过更改下面的几个代码来切换自动化以在第一个 SAP 屏幕和下一个屏幕上运行。
Dim sapSys2 As String
Set session = getSAPStat2(sapSys2)
所以它会是
If session.findById("wnd[0]/usr/txtBKPF-MONAT").Text = "1" Then
Dim sapSys2 As String
Set session = getSAPStat2(sapSys2)
session.findById("wnd[0]/tbar[0]/okcd").Text = "/NFB03"
'continue
Else
'continue
全功能代码:
Function getSAPStat2(ByRef sapBindStatus2 As String) As Object
On Error GoTo errored
If Not IsObject(SAPApp) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set SAPApp = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(SAPConnection) Then
Set SAPCon = SAPApp.Children(0)
End If
session_number = 1
Set session = SAPCon.Children(Int(session_number))
If Not IsObject(session) Then
Set session = SAPCon.Children(0)
End If
If IsObject(WScript) Then
WScript.ConnectObject session, "on"
WScript.ConnectObject SAPApp, "on"
End If
Set getSAPStat2 = session
sapBindStatus2 = session.info.systemname
Exit Function
errored:
sapBindStatus2 = "SAP session could not be accessed!"
End Function
评论
1赞
Sandra Rossi
10/6/2023
很难理解你的答案,它告诉用户在代码中得到答案,这值得用完整的文字解释解决方案。通过阅读您的代码,我现在意识到您的问题是什么,已经存在一个更好的答案。
评论
Option Explicit
Option Explicit
WScript.ConnectObject session, "on"