多屏幕 SAP Automation

SAP Automation on multiple screens

提问人:sephiroth 提问时间:10/4/2023 最后编辑:Storaxsephiroth 更新时间:10/5/2023 访问量:101

问:

我有一个关于在两个或多个屏幕中在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"
Excel VBA SAP-GUI

评论

0赞 Storax 10/4/2023
这是VBA代码吗?你用吗?你看过这篇文章或这篇文章Option Explicit
0赞 sephiroth 10/4/2023
@Storax是的,这是VBA代码,我没有使用Option Explicit。
0赞 Storax 10/4/2023
对不起,它不是真正的VBA代码,因为它部分是VBS代码。我说的那部分是你在录制那部分代码时得到的(Wscript)。掌握所有信息会很有帮助。您是否点击了我也添加到评论中的链接?
0赞 sephiroth 10/4/2023
@Storax 对不起,是的,VBS 连接部分是直接通过 SAP 记录记录的。所以我改变的区别是 SAPCon 和 SAPApp。
1赞 Storax 10/4/2023
@Sandra Rossi:关键是要检查专业水平。此外,它不是有效的VBA代码。使用后,您会立即看到 .你永远无法跑步。Option ExplicitWScript.ConnectObject session, "on"

答:

-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
很难理解你的答案,它告诉用户在代码中得到答案,这值得用完整的文字解释解决方案。通过阅读您的代码,我现在意识到您的问题是什么,已经存在一个更好的答案。