You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

复制SAP导出数据后Excel工作簿无法关闭问题求助

问题分析与修复方案

核心问题

  1. 从SAP导出的retornos pendentes.xlsx始终无法关闭
  2. 完成数据粘贴后,运行宏的初始工作簿(file2.xlsm)意外关闭

问题根源

  • 变量逻辑混乱:原代码中wbkretorno先被赋值为文件路径(字符串类型),后又被Set为Workbook对象,导致后续依赖ActiveWorkbook的操作不可靠——复制数据后焦点会切换到ThisWorkbook,此时ActiveWorkbook指向的是运行宏的文件,而非导出的xlsx。
  • 错误关闭工作簿:当焦点切换到ThisWorkbook后,执行ActiveWorkbook.Close会错误关闭运行宏的初始工作簿,而非目标xlsx文件。

修复后的宏代码

Sub atualizarretornos()
    Set SapGuiAuto = GetObject("SAPGUI")
    Set objGui = SapGuiAuto.GetScriptingEngine
    Set objConn = objGui.Children(0)
    Set session = objConn.Children(0)

    session.findById("wnd[0]").maximize
    session.findById("wnd[0]/tbar[0]/okcd").Text = "/n"
    session.findById("wnd[0]").sendVKey 0
    session.findById("wnd[0]/tbar[0]/okcd").Text = "vl06o"
    session.findById("wnd[0]").sendVKey 0
    session.findById("wnd[0]/usr/btnBUTTON6").press
    session.findById("wnd[0]").sendVKey 17
    session.findById("wnd[1]").sendVKey 8
    session.findById("wnd[0]").sendVKey 8
    session.findById("wnd[0]").sendVKey 43
    session.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = "retornos pendentes.xlsx"
    session.findById("wnd[1]/usr/ctxtDY_FILENAME").caretPosition = 23
    session.findById("wnd[1]/tbar[0]/btn[11]").press

    Application.ScreenUpdating = False
    
    ' 拆分路径与工作簿变量,明确类型
    Dim wbkRetornoPath As String
    Dim wbkRetorno As Workbook
    wbkRetornoPath = "C:\Users\lopesa04\Desktop\retornos pendentes.xlsx"
    
    ' 直接将打开的工作簿赋值给变量,避免依赖ActiveWorkbook
    Set wbkRetorno = Workbooks.Open(wbkRetornoPath)

    ' 复制数据到目标工作表
    wbkRetorno.Worksheets(1).Range("A:P").Copy
    With ThisWorkbook.Sheets("retornos pendentes")
        .Range("A:P").PasteSpecial Paste:=xlPasteValues
    End With
    
    ' 通过变量直接关闭导出的工作簿,无需保存(无修改操作)
    wbkRetorno.Close SaveChanges:=False
    
    ' 明确激活当前工作簿的Sheet1
    ThisWorkbook.Sheets("Sheet1").Activate
    Application.ScreenUpdating = True
End Sub

关键修改说明

  1. 变量拆分:将文件路径和Workbook对象分开定义,避免类型混淆,代码逻辑更清晰。
  2. 直接引用工作簿:全程使用wbkRetorno变量操作导出的xlsx文件,彻底摆脱对ActiveWorkbook的依赖,避免焦点切换引发的错误。
  3. 关闭时跳过保存:导出的文件仅作为数据中转,无需保存修改,指定SaveChanges:=False可跳过保存提示并快速关闭。
  4. 明确激活目标工作表:通过ThisWorkbook指定运行宏的工作簿,确保激活的是正确的工作表。

内容的提问来源于stack exchange,提问作者André Lopes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 01:05:22