2

SAP からデータを取得する必要があります。このエラーはランダムに発生します:

オブジェクト 'ISapCTextField' のメソッド 'Text' が失敗しました

検索しましたが、解決策はありません。何度もトライしてエラーハンドリングもうまくいきませんでした。.Textより多くの方法を試す代わりに、その方法を完全に避けました。

エラーの原因となっている行の例:

session.findById("wnd[0]/usr/ctxtMATNR-LOW").text = "500000000"

.textメソッドの使用を避けるために、私SendKeysは同じことを達成していました。基本的に、SAPウィンドウをアクティブウィンドウにし、フォーカスを設定してSAP GUIで目的のフィールドを選択し、Ctrl+Vを使用sendkeysして範囲からフィールドにテキストを貼り付けます。以下はコードです:

'Declaration
Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Declare Function SetForegroundWindow Lib "user32" ( _
ByVal HWnd As Long) As Long


'Finds SAP Window.
Public Sub ActivateSAPWindow()

    Dim HWnd As Long
    'SAP window Name can be found on the status bar of the Portal.
    'Note: This only works in when you click on R/3 and it open a portal. It will not work if it open in the internet explorer
    'To make it work for internet explorer , Simply change the name of the Window to find internet explorer or any window you wish.
    HWnd = FindWindow(vbNullString, "R/3 - SAP NetWeaver Portal - Internet Explorer")
        If HWnd Then
            SetForegroundWindow HWnd
    End If
    
End Sub

Public Sub SAPSafeText(ID As String, OriginCell As String)
    
    'Location of the cell you wanna copy to the field.
    Worksheets("SAP Mapping").Range(OriginCell).Copy
    
    Call ActivateSAPWindow
    Session.FindByID(ID).SetFocus
    
    SendKeys "^v"
    
    'Important to wait for completion before next line.
    Wait (5)
End Sub

関数を呼び出すには、単純に SAP スクリプト レコードを使用してフィールド ID 名を取得し、SAPSafeText ("文字列としてのフィールドの ID"、"文字列としてのセル範囲") に解析します。

呼び出しの例:

Call SAPSafeText("wnd[0]/usr/ctxtBWART-LOW", Low)
Call SAPSafeText("wnd[0]/usr/ctxtBWART-HIGH", High)

これは強引な方法ですが、機能します。

エラーが発生するのはなぜですか?

これを処理するより良い方法はありますか?

4

4 に答える 4

0

sendkeys メソッドの代わりに以下を試すことができます。

...
Application.Wait (Now + TimeValue("0:00:01"))
session.findById("wnd[0]/usr/ctxtMATNR-LOW").text = "500000000"
...

よろしく、 ScriptMan

于 2018-04-23T06:25:26.057 に答える