Vba 如何将剪贴板中的值粘贴到SAP GUI

Vba 如何将剪贴板中的值粘贴到SAP GUI,vba,sap-gui,Vba,Sap Gui,在SAP上删除订单是我的日常任务之一,我每天要删除大约300个订单,因此每次我转到交易(VAO2),然后从excel中粘贴订单号,然后选择选项并将其删除,我想编写整个过程的脚本,但每次粘贴从excel复制的新订单号,因此,我创建了下面的脚本,但它的顺序与“2268979048”相同,我需要编写代码的一部分,让脚本在运行脚本时将数字粘贴到剪贴板中(请注意,我无权使用批量删除事务) 下面是一些可能有帮助的方法,让我们说: session.findById("wnd[0]/usr/ctxtV

在SAP上删除订单是我的日常任务之一,我每天要删除大约300个订单,因此每次我转到交易(VAO2),然后从excel中粘贴订单号,然后选择选项并将其删除,我想编写整个过程的脚本,但每次粘贴从excel复制的新订单号,因此,我创建了下面的脚本,但它的顺序与“2268979048”相同,我需要编写代码的一部分,让脚本在运行脚本时将数字粘贴到剪贴板中(请注意,我无权使用批量删除事务)


下面是一些可能有帮助的方法,让我们说:

session.findById("wnd[0]/usr/ctxtVBAK-VBELN").text = InputBox("Pass in order to delete:", "Order deleting script")
这样,您可以一次提供每个订单。但我知道这不能解决你的问题。当您尝试使用VBS时,您的问题更为复杂。在vbs中使用剪贴板并不容易,但这是可能的

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

IterateThroughOrders()

Sub IterateThroughOrders()

    Dim userClippboard
    
    userClippboard = CreateObject("HtmlFile").ParentWindow.ClipboardData.GetData("text")
    
    For Each item In Split(userClippboard, Chr(13))
        If item <> "" Then
        
            'open new transaction no matter what
            session.findById("wnd[0]/tbar[0]/okcd").text = "/nVA02"
            
            session.findById("wnd[0]").sendVKey 0
            session.findById("wnd[0]/usr/ctxtVBAK-VBELN").text = item
            session.findById("wnd[0]/usr/ctxtVBAK-VBELN").caretPosition = 10
            session.findById("wnd[0]").sendVKey 0
            session.findById("wnd[1]/tbar[0]/btn[0]").press
            
            'the rest of the code goes here, supposedly there's more to that
            
        End If
    Next
    
End Sub
如果不是IsObject(应用程序),则
设置SapGuiAuto=GetObject(“SAPGUI”)
设置应用程序=SapGuiAuto.GetScriptingEngine
如果结束
如果不是IsObject(连接),则
设置连接=应用程序.Children(0)
如果结束
如果不是IsObject(会话),则
设置会话=连接。子级(0)
如果结束
如果是IsObject(WScript),则
WScript.ConnectObject会话,“打开”
WScript.ConnectObject应用程序,“打开”
如果结束
session.findById(“wnd[0]”)。最大化
iteratethraworders()
子迭代顺序()
Dim用户剪贴板
userClippboard=CreateObject(“HtmlFile”).ParentWindow.ClipboardData.GetData(“文本”)
对于拆分中的每个项目(userClippboard,Chr(13))
如果项目为“”,则
'无论发生什么情况,都要打开新交易
session.findById(“wnd[0]/tbar[0]/okcd”).text=“/nVA02”
session.findById(“wnd[0]”)。sendVKey 0
session.findById(“wnd[0]/usr/ctxtVBAK VBELN”).text=item
session.findById(“wnd[0]/usr/ctxtVBAK VBELN”).caretPosition=10
session.findById(“wnd[0]”)。sendVKey 0
session.findById(“wnd[1]/tbar[0]/btn[0]”。按
“剩下的代码放在这里,应该还有更多
如果结束
下一个
端接头
说明:

这里发生的事情是,您的clippboard正在使用HtmlFile对象加载,这是一种通过VBS拥有的墙的方法-它不支持简单的剪贴板处理方式-但它可以工作。 从包含正确顺序的列中复制的excel工作表数据将按Chr(13)字符进行拆分,也就是说,在本例中,将按特征线-新单元格进行拆分。
此拆分将使您能够在刚刚复制的每个值上创建一个循环。

您的代码是否一直使用相同的参数,除了订单号?如果是,在Excel文件的哪一列中,订单号是否存在?您好!还活着吗?我问上述问题是为了向您展示一种在区域单元格之间迭代的方法,其中存在订单号,并用单元格值替换“2268979048”……这是否回答了您的问题?
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

IterateThroughOrders()

Sub IterateThroughOrders()

    Dim userClippboard
    
    userClippboard = CreateObject("HtmlFile").ParentWindow.ClipboardData.GetData("text")
    
    For Each item In Split(userClippboard, Chr(13))
        If item <> "" Then
        
            'open new transaction no matter what
            session.findById("wnd[0]/tbar[0]/okcd").text = "/nVA02"
            
            session.findById("wnd[0]").sendVKey 0
            session.findById("wnd[0]/usr/ctxtVBAK-VBELN").text = item
            session.findById("wnd[0]/usr/ctxtVBAK-VBELN").caretPosition = 10
            session.findById("wnd[0]").sendVKey 0
            session.findById("wnd[1]/tbar[0]/btn[0]").press
            
            'the rest of the code goes here, supposedly there's more to that
            
        End If
    Next
    
End Sub