2017-05-30 64 views
0

我试图运行SAP脚本记录来自动收集显示几个项目编号的文本。当我检查它,这是我的代码有:Retreive在Excel中通过宏显示的文本字段

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”或其他任何事务。 而我不明白你的意思是显示的文字。您可以使用.text获取sapgui字段的内容,例如session.findById(“wnd [0]/usr/ctxtEKKO-LIFNR”)。 您可以使用脚本跟踪器找到字段的名称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

嘿@SuShuang我还有一个问题。显示的数据有三条不同的线。当我将它复制到我的Excel表格中时,它会进入单元格但不保留格式。但是对于这项任务,格式化非常重要。任何想法,我怎么能做到这一点? – MopMop