【问题标题】:vba code to copy a column from sap window and paste the values in excel sheetvba代码从sap窗口复制一列并将值粘贴到excel表中
【发布时间】:2017-03-31 17:01:39
【问题描述】:

我有一个代码可以在 sap 上执行一些 SAP 事务,然后从 sap 上的网格中选择一整列我成功到这里,但我想复制该列并将其粘贴到 Excel 工作表中,但我不能这样做.我试图打开上下文菜单以选择复制文本但它不起作用我试图从键盘发送 CTRL+C 笔划但也失败了。如果有人可以帮助我,我将非常感激。这是我的代码:

Sub lolo()

If Not IsObject(App) Then
    Set SapGuiAuto = GetObject("SAPGUI")
    Set App = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
     Set Connection = App.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 App, "on"
End If
session.findById("wnd[0]").maximize
session.findById("wnd[0]/usr/btn%_EQUNR_%_APP_%-VALU_PUSH").press
session.findById("wnd[1]/tbar[0]/btn[24]").press
session.findById("wnd[1]/tbar[0]/btn[8]").press
session.findById("wnd[0]/usr/txtSELCOUNT").Text = "1"
session.findById("wnd[0]/usr/txtSELCOUNT").SetFocus
session.findById("wnd[0]/usr/txtSELCOUNT").caretPosition = 14
session.findById("wnd[0]/tbar[1]/btn[8]").press
session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").setCurrentCell -1, "PTTXT"
session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").selectColumn "PTTXT"
session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").contextMenu
session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").selectContextMenuItem "&FILTER"
session.findById("wnd[1]").sendVKey 4
session.findById("wnd[2]/usr/lbl[1,23]").SetFocus
session.findById("wnd[2]/usr/lbl[1,23]").caretPosition = 2
session.findById("wnd[2]").sendVKey 2
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").setCurrentCell -1, "CNTRC"
session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").selectColumn "CNTRC"
Application.Wait (Now + TimeValue("0:00:03"))
SendKeys "^C"
session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").contextMenu


End Sub

【问题讨论】:

    标签: vba sap


    【解决方案1】:

    我有同样的问题,取决于我得到的交易

    session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").contextMenu
    session.findById("wnd[1]/tbar[0]/btn[0]").press
    

    session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").contextMenu
    session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").selectContextMenuItemBytext "Copy Text"
    

    两者都没有复制该列。

    解决我的困境的是这条方便的线:

    session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").SelectContextMenuItemByPosition "0"
    

    【讨论】:

      【解决方案2】:

      我希望 OP 不再对答案感兴趣,但认为人们仍在阅读这个问题......

      将表单添加到您的 vba 项目,然后将以下代码添加到您的模块中

      Dim DataObj As MSForms.DataObject 
      Set DataObj = New MSForms.DataObject
      DataObj.GetFromClipboard
      sString = DataObj.GetText(1)
      

      这会将剪贴板中的数据提取到 sString 中。然后,您可以将字符串传递给单元格值。

      【讨论】:

      • 这并不能解决问题,因为 OP 甚至无法将列放入剪贴板
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-13
      • 1970-01-01
      相关资源
      最近更新 更多