从一个工作簿复制到另一个工作簿中的特定工作表

问题描述

我想创建一个需要取出 3 个不同报告的脚本。需要将报告中的信息复制到运行脚本的主文件“Workingfile.xlsm”中的特定工作表。第二份报告基于从第一次报告中提取的数据,第三次报告基于从第二次报告中提取的日期。

下面是第一次尝试保存为export.xlsx并打开文件的第一份报告。

在此之后执行的步骤需要是:

  1. 删除文件“Workingfile.xlsm”中特定工作表“EKKO”中的所有先前数据
  2. 将导出文件中的新数据复制到主文件“Workingfile.xlsm”中的特定工作表“EKKO”
  3. 关闭导出文件
  4. 复制特定工作表“EKKO”中的 B 列。

脚本似乎卡在这一行:y.Sheets("EKKO").Range("A1").PasteSpecial

 Sub Button1_Click()        
        
        
       If Not IsObject(SAPGuiApp) Then
           Set SapGuiAuto = Getobject("SAPGUI")
           Set SAPGuiApp = SapGuiAuto.GetScriptingEngine
        End If
        If Not IsObject(Connection) Then
           Set Connection = SAPGuiApp.Children(0)
        End If
        If Not IsObject(SAP_session) Then
           Set SAP_session = Connection.Children(0)
        End If
        If IsObject(WScript) Then
           WScript.ConnectObject SAP_session,"on"
           WScript.ConnectObject SAPGuiApp,"on"
        End If
        
        
        SAP_session.findById("wnd[0]").maximize
        SAP_session.findById("wnd[0]/tbar[0]/okcd").Text = "/nze16n"
        SAP_session.findById("wnd[0]").sendVKey 0
        SAP_session.findById("wnd[0]/usr/ctxtS_TABLE-LOW").Text = "EKKO"
        SAP_session.findById("wnd[0]/usr/ctxtS_TABLE-LOW").caretPosition = 4
        SAP_session.findById("wnd[0]/usr/btnGO").press
        SAP_session.findById("wnd[1]/tbar[0]/btn[0]").press
        SAP_session.findById("wnd[0]/tbar[1]/btn[17]").press
        SAP_session.findById("wnd[1]/usr/txtV-LOW").Text = "CV_TEST"
        SAP_session.findById("wnd[1]/usr/txtENAME-LOW").Text = ""
        SAP_session.findById("wnd[1]/usr/txtENAME-LOW").SetFocus
        SAP_session.findById("wnd[1]/usr/txtENAME-LOW").caretPosition = 0
        SAP_session.findById("wnd[1]/tbar[0]/btn[8]").press
        SAP_session.findById("wnd[0]/tbar[1]/btn[8]").press
        SAP_session.findById("wnd[0]/tbar[1]/btn[46]").press
        SAP_session.findById("wnd[0]/tbar[1]/btn[43]").press
        SAP_session.findById("wnd[1]/usr/ctxtDY_PATH").Text = "C:\Users\admu\Documents\SAP\SAP GUI"
        SAP_session.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = "export.xslx"
        SAP_session.findById("wnd[1]/tbar[0]/btn[11]").press
        
        
        End Sub
        
        ----------------------------------------------------------------------------
        Sub copyFromExportFile()
        
        
        Dim x As Workbook
        Dim y As Workbook
        
        Set x = Workbooks("export.xlsx")
        Set y = Workbooks("Workfile.xlsm")
        
        

        x.Sheets("Sheet1").Range("A1").copy
        y.Sheets("EKKO").Range("A1").ClearContents
        y.Sheets("EKKO").Range("A1").PasteSpecial
        
        x.Close
        
        y.Sheets("EKKO").Columns(2).copy
        
        
        End Sub

解决方法

我的顺序错了...顺序需要先是 clear 然后是 copypaste... 还需要对代码行进行一些小的调整。

Sub CopyFromExportFile()    

Dim x As Workbook
Dim y As Workbook

Set x = Workbooks("export.xlsx")
Set y = Workbooks("Workfile.xlsm")

y.Sheets("EKKO").Cells.Clear

x.Sheets("Sheet1").Cells.Copy
y.Sheets("EKKO").Range("A1").PasteSpecial
Application.CutCopyMode = False

x.Close

y.Sheets("EKKO").Columns(2).Copy    

End Sub