如何使用VBA从Excel 64x上传Sap表?

2020-08-19 10:51发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好!

我想自动将数据从excel(64x)上传到SAP表。

我开始了必要的交易,但不能填写必填表字段。

我的脚本如下:

子SAP_MIGO()

设置SapGuiAuto = GetObject(" SAPGUI")

设置sapApp = SapGuiAuto.GetScriptingEngine

设置SapConnection = sapApp.Children(0)

设置sapsession = SapConnection.Children(0)

如果是IsObject(WScript)然后

WScript.ConnectObject sapsession,"开"

WScript.ConnectObject sapApp,"打开"

如果结束

sapsession.StartTransaction" migo"

'-我想在此处填写所需交易的表格。 有关文件中附加的表文件名的信息

结束子

我不能使用findByID方法,因为ID在不同用户的计算机上不同

非常感谢您的帮助!

table-view.jpg

table-ids.jpg

table-view.jpg (83.3 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好!

我想自动将数据从excel(64x)上传到SAP表。

我开始了必要的交易,但不能填写必填表字段。

我的脚本如下:

子SAP_MIGO()

设置SapGuiAuto = GetObject(" SAPGUI")

设置sapApp = SapGuiAuto.GetScriptingEngine

设置SapConnection = sapApp.Children(0)

设置sapsession = SapConnection.Children(0)

如果是IsObject(WScript)然后

WScript.ConnectObject sapsession,"开"

WScript.ConnectObject sapApp,"打开"

如果结束

sapsession.StartTransaction" migo"

'-我想在此处填写所需交易的表格。 有关文件中附加的表文件名的信息

结束子

我不能使用findByID方法,因为ID在不同用户的计算机上不同

非常感谢您的帮助!

table-view.jpg

table-ids.jpg

table-view.jpg (83.3 kB)
付费偷看设置
发送
5条回答
蓋茨
1楼 · 2020-08-19 11:36.采纳回答

Vitaly vorontsov

Hello Vitaly

这里有一个小方法 检测没有程序名称和屏幕编号的表。

'-Sub FindByTypeName -----------------------------  -----------------------
 '-
 '-通过其类型和名称独立查找UI元素的功能
 '-来自程序名称和屏幕编号
 '-oApp = SAP应用程序
 '-oArea =要搜索的容器
 '-strType =搜索的UI元素的类型
 '-strName =从UI元素中搜索的完整名称或部分名称
 '-
 '-------------------------------------------------  ----------------------
 函数FindByTypeName(oApp,oArea,strType,strName)

   对于i = 0到oArea.Children()。Count()-1
     设置对象= oArea.Children(CInt(i))
     如果Obj.Type = strType和InStr(Obj.Name,strName),则
       'MsgBox对象名称&""&对象类型&""&对象文本
       设置FindByTypeName = Obj
       退出功能
     万一
     如果Obj.ContainerType()= True,则
       设置ObjChildren = Obj.Children()
       如果ObjChildren.Count()> 0,则
         设置NextArea = oApp.findByID(Obj.ID)
         设置FindByTypeName = FindByTypeName(oApp,NextArea,strType,strName)
         如果不是FindByTypeName什么都不是
           退出功能
         万一
         设置NextArea = Nothing
       万一
       设置ObjChildren =无
     万一
     设置对象=无
   下一个
   设置FindByTypeName = Nothing

 结束功能
 

现在您可以通过以下两行找到表:

设置UserArea = session.findById(" wnd [0]/usr")
 设置GoItem = FindByTypeName(sapApp,UserArea," GuiTableControl"," GOITEM")
 

它与路径以及任何程序名称或屏幕编号均无关。 而且不必定义UI元素的完整名称,只需一个部分就可以。

最诚挚的问候
Stefan

95年老男孩
2楼-- · 2020-08-19 11:48

为什么您认为ID是 会"在不同用户的计算机上有所不同"吗? 字段ID取决于SAP程序/屏幕,而不取决于用户计算机。

暮风yp
3楼-- · 2020-08-19 11:23

Sandra Rossi,

字段的ID如下:

wnd [0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0008/subSUB_ITEMLIST:SAPLMIGO:0200/tblSAPLMIGOTV_GOITEM/ctxtGOITEM-MAKTX [3,21]

ID包含列号。 每个用户都可以在SAP表中设置列顺序。 因此,在这种情况下,ID不起作用。

position1.jpg

position2.jpg

bbpeas
4楼-- · 2020-08-19 11:47

Vitaly vorontsov

Hello Vitaly,

感谢您的回复。

要加快脚本运行速度,您可以设置更多UserArea 具体。 wnd [0]/usr是完整的区域。使用更特定的区域可以节省大量时间。

是的,据我所知,您的代码看起来不错。 p>

最诚挚的问候
Stefan

宇峰Kouji
5楼-- · 2020-08-19 11:40

感谢您的更新。 没错,SAP后端可能会基于当前登录的SAP用户(以及自定义等等)显示不同的数据。

注意:请使用COMMENT按钮发表评论,问题和添加详细信息 等等,ANSWER只是提出一个解决方案,在答案区域的右边删除SAP文本。

一周热门 更多>