Есть ли способ найти текст в приведенном ниже коде вместо ключа - PullRequest
0 голосов
/ 10 декабря 2018

В приведенном ниже коде Sap выбирает Ключ 22, однако для другого пользователя Ключ отличается, поэтому я не могу заставить этот код работать для обоих пользователей.Можно ли найти ключ, выполнив поиск по тексту?

Sub Report_140()
    If Not IsObject(SAP) Then
        Set SapGuiAuto = GetObject("SAPGUI")
        Set SAP = SapGuiAuto.GetScriptingEngine
    End If

    If Not IsObject(Connection) Then
        Set Connection = SAP.Children(0)
    End If

    If Not IsObject(session) Then
       Set session = Connection.Children(0)
    End If

    If IsObject(WScript) Then
       WScript.ConnectObject session, "on"
       WScript.ConnectObject Application, "on"
    End If

    session.findById("wnd[0]").maximize
    session.findById("wnd[0]/tbar[0]/okcd").Text = "S_Ph0_48000513"
    session.findById("wnd[0]").sendVKey 0
    session.findById("wnd[1]/usr/cmbDYNP4100-DD_USERGROUP").SetFocus
    session.findById("wnd[1]/usr/cmbDYNP4100-DD_USERGROUP").Key = "22"

1 Ответ

0 голосов
/ 11 декабря 2018

Похоже, вы ищете определенный текст в поле со списком для группы пользователей транзакции S_Ph0_48000513.Я попробовал следующий код для специального запроса S_Ph0_48000513:

Const KEY_TEXT = "..your user group ..."
Dim k As Long
Dim keyFound As Boolean

    With session
        .findById("wnd[0]/tbar[0]/okcd").Text = "S_Ph0_48000513"
        .findById("wnd[0]").sendVKey 0
        k = 1
        'Careful! If the KEY_TEXT is not found this loop will run into an error
        Do                
            ' Setting the key is slow but right now it seems there is no other way 
            .findById("wnd[1]/usr/cmbDYNP4100-DD_USERGROUP").Key = CStr(k)
            keyFound = InStr(1, .findById("wnd[1]/usr/cmbDYNP4100-DD_USERGROUP").Text, KEY_TEXT)
            k = k + 1
        Loop Until keyFound
    End With
...