【问题标题】:Copy from one workbook to specific sheet in another workbook从一个工作簿复制到另一个工作簿中的特定工作表
【发布时间】:2023-03-28 19:58:01
【问题描述】:

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

以下是第一次尝试保存为 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

【问题讨论】:

  • Stack Overflow 不是为您编写代码的论坛。你必须说出你尝试了什么,是什么阻止你这样做,并提出一个准确的问题。有关详细信息,请参阅help
  • 对不起。问题已更新。
  • 好的,这与PasteSpecial 差不多,但是“似乎卡住了”究竟是什么意思,即发生了什么?
  • 看来我的步骤顺序错误...在清除之前复制。此停用的 Copy 部分因此无法执行 PasteSpecial。
  • 现在你可能认为这是一个非常奇怪的问题......当我尝试运行整个脚本时,只有第一个 Sub 被执行。它不执行 Sub CopyFromExportFile() ?

标签: excel vba sap-gui


【解决方案1】:

我的订单有误...订单必须是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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多