2017-05-30 9 views
0

SAPスクリプトの記録を実行して、いくつかの項目番号に対して自動的に表示されるテキストを収集しようとしました。私は、これは私が得たコードであることを確認しましたが:Retreive Excelでマクロを使用してSAPのテキストフィールドを表示

明らか
If Not IsObject(application) Then 
    Set SapGuiAuto = GetObject("SAPGUI") 
    Set application = SapGuiAuto.GetScriptingEngine 
End If 
If Not IsObject(connection) Then 
    Set connection = application.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 = "CS03" 
session.findById("wnd[0]").sendVKey 0 
session.findById("wnd[0]/usr/ctxtRC29N-STLAN").setFocus 
session.findById("wnd[0]/usr/ctxtRC29N-STLAN").caretPosition = 0 
session.findById("wnd[0]").sendVKey 4 
session.findById("wnd[1]/usr/lbl[1,10]").setFocus 
session.findById("wnd[1]/usr/lbl[1,10]").caretPosition = 0 
session.findById("wnd[1]/tbar[0]/btn[0]").press 
session.findById("wnd[0]/usr/ctxtRC29N-MATNR").text = "508546" 
session.findById("wnd[0]/usr/ctxtRC29N-WERKS").text = "1000" 
session.findById("wnd[0]/usr/ctxtRC29N-WERKS").setFocus 
session.findById("wnd[0]/tbar[0]/btn[0]").press 
session.findById("wnd[0]/usr/tblSAPLCSDITCALT/ctxtRC29K-STLST[1,15]").setFocus 
session.findById("wnd[0]").sendVKey 2 
session.findById("wnd[0]/tbar[0]/btn[3]").press 
session.findById("wnd[0]/usr/tblSAPLCSDITCALT/ctxtRC29K-STLST[1,15]").setFocus 
session.findById("wnd[0]").sendVKey 2 
session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCDO").select 
session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA").select 
session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/txtRC29P-KTEXT[3,3]").setFocus 
session.findById("wnd[0]").sendVKey 2 
session.findById("wnd[0]/usr/tabsTS_ITEM/tabpPDAT").select 
session.findById("wnd[0]/tbar[0]/btn[3]").press 
session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/txtRC29P-KTEXT[3,6]").setFocus 
session.findById("wnd[0]").sendVKey 2 
session.findById("wnd[0]/usr/tabsTS_ITEM/tabpPDAT/ssubSUBPAGE:SAPLCSDI:0840/btnRC29P-ICON1").press 
session.findById("wnd[0]/usr/cntlSCMSW_CONTAINER_2102/shellcont/shell").setDocument 1,"e1xydGYxXGFkZWZsYW5nMTAyNVxhbnNpXGFuc2ljcGcxMjUyXHVjM=" 

私が表示されたテキストではなくテキストフィールドを取得したいと、私は必要な結果を取得できませんでした。どのようにそれを得るための任意のアイデアですか?

+0

私は怖いですが、あなたはより具体的でなければなりません。上記のコードは、スクリプトレコーダーで記録されているように見え、呼び出すトランザクションは含まれていません。 session.findById( "wnd [0]/tbar [0]/okcd")のような行はありません。Text = "/ NVA03"などのトランザクション。 私は、表示されるテキストの意味を理解していません。 sapguiフィールドの内容は、session.findById( "wnd [0]/usr/ctxtEKKO-LIFNR")などの.textで取得されます。 フィールドの名前は、スクリプトトラッカーhttps://tracker.stschnell.de/index.htm – Storax

+0

@storaxで知ることができます。私はちょうどそれを編集しました:) – MopMop

答えて

1

まず、.setFocusの代わりに、.Textメソッドを使用してみてください。次に、strMyTextのような変数を作成します。その後、SAPからこの変数にテキストを割り当て、最後にそれをどこかに貼り付けます。 だから、このようなものになります。

Sub SAPText() 

Dim strMyText 

If Not IsObject(application) Then 
    Set SapGuiAuto = GetObject("SAPGUI") 
    Set application = SapGuiAuto.GetScriptingEngine 
End If 
If Not IsObject(connection) Then 
    Set connection = application.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 = "CS03" 
session.findById("wnd[0]").sendVKey 0 

strMyText = session.findById("wnd[0]/usr/ctxtRC29N-STLAN").Text 

Activecell.value = strMyText 

End sub 
+0

Hey @SuShuang私は別の質問があります。そこに表示されるデータは、3つの異なる行にあります。 Excelシートにコピーすると、セルに入りますが、書式は保持されません。しかし、この作業では、書式設定は非常に重要です。どのように私はそれを行うことができるかについての任意のアイデア? – MopMop

関連する問題