【问题标题】:SAP & Excel Error - SAP trying to open a file in ExcelSAP 和 Excel 错误 - SAP 尝试在 Excel 中打开文件
【发布时间】:2020-07-14 12:35:05
【问题描述】:

我编写了许多 Excel 宏,它们将脚本消息发送到 SAP 的 GUI 以执行查询并将结果下载到 Excel 文件中。我的问题是 SAP 会在导出完成后尝试打开文件。我想禁止这个动作,因为那时我的宏已经转移到进程的另一部分,打开文件会中断它。 我通过在创建 Excel 导出后立即重命名它来解决此问题。这只是在此过程中解决问题。当我的宏处理完成时,Excel 开始尝试打开文件,由于重命名,Excel 无法找到这些文件。我通常会收到此消息:

有没有办法通过 SAP 脚本或 SAP 中的环境设置来告诉 SAP 不要尝试打开导出?
谢谢

【问题讨论】:

  • 解决方案是在 SAP 端不尝试打开,或者在您的宏中关闭由 SAP 打开的 Excel 文件。您能否解释一下您在 SAP 端导出的操作,或者您的宏中有哪些代码,具体取决于您想问的问题?
  • 这是我的困境。在 excel 方面,您不知道文件何时打开。有时它会等到宏过程完成,有时则不会。在这个当前正在开发的宏中,它一直等到结束,然后 Excel 将其中三个错误发送到屏幕上,用于 SAP 导出到 xlsx 的三个文件。优雅的解决方案是将 SAP GUI 应用程序设置为不尝试打开文件。如果您知道并可以分享它,那么您就是金子!
  • 如果您更喜欢 SAP 方面的解决方案,问题是您没有描述足够的导出操作(“执行查询并将结果下载到 Excel 文件”)。所以,请再次解释一下宏在 SAP 端的作用(运行事务代码?单击按钮?按键?等)
  • 我找到了解决方案。在 Excel 365 中,我使用宏打开电子表格的实例,然后使用空白电子表格打开第二个 Excel 实例。当 SAP 告诉 Excel 打开导出的电子表格时,它告诉 Excel 的新实例,而不是运行宏的实例。这不是一个优雅的解决方案,但它确实有效。

标签: excel vba sap


【解决方案1】:

对我来说,最好的解决方案是: 从 SAP 另存为本地 (txt)。 TXT 没有自动打开。 实例已打开但未出现在 VBE 列表中。 当我尝试使用

设置打开的工作簿时
Set src = Workbooks("EXPORT.XLSX")

在调试模式下设置正常,但自动设置不正常,即使应用程序等待 excel 设置失败。 所以excel在一切停止后查看新实例。

/通过 SAP 脚本,在 VBA/中/

session.findById("wnd[0]/usr/cntlCUSTOM/shellcont/shell/shellcont/shell").pressToolbarContextButton "&MB_EXPORT"
session.findById("wnd[0]/usr/cntlCUSTOM/shellcont/shell/shellcont/shell").selectContextMenuItem "&PC"
session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[1,0]").select
session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[1,0]").setFocus
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/usr/ctxtDY_PATH").text = "C:\Data\"
session.findById("wnd[1]/usr/ctxtDY_FILENAME").text = "data.txt"
session.findById("wnd[1]").sendVKey 11 

在 Excel 中只是简单

Sub text_to_sheet()
Dim wb As Workbook, txt As Workbook
Dim ws As Worksheet
Set wb = ThisWorkbook
Set ws = wb.Sheets("tmp_sheet") 'a temporary sheet
Set txt = Workbooks.Open("C:\Data\data.txt")
txt.Sheets(1).Cells.Copy ws.Cells
txt.Close SaveChanges:=False
End Sub

然后我只是简单地保存所需的工作表,在我的例子中是 *.csv

Sub exp_csv()
trgt = Environ("USERPROFILE") & "\Desktop\"
fn = "desired_filename"
Application.DisplayAlerts = False
ThisWorkbook.Sheets(2).Copy
ActiveWorkbook.SaveAs Filename:=trgt & fn,FileFormat:=xlCSV 'FileFormat:=xlWorkbookDefault , for regular xlsx
ActiveWorkbook.Close
Application.DisplayAlerts = True
End Sub

【讨论】:

    【解决方案2】:

    将其复制到从 SAP 导出文件的代码之后。为我工作,我希望它有帮助:)

    Dim oShell : Set oShell = CreateObject("WScript.Shell")             'check all process runing
    
    oShell.Run "taskkill /im excel.exe", , True                         'kill firts SAP excel opening attempt
    oShell.Run "taskkill /f /im excel.exe", , True                      'kill second system excel opening attempt
    

    【讨论】:

      【解决方案3】:

      我在 SAP 论坛上找到了答案。看起来你可以调用这个子过程来关闭所有其他的 Excel 实例。

      ' Choose one
      Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long '32 bit Windows
      Private Declare PtrSafe Function GetCurrentProcessId Lib "kernel32" () As LongPtr '64 bit Windows
      
      Sub closeOtherExcelInstances()
          Dim oServ As Object
          Dim cProc As Variant
          Dim oProc As Object
          Dim currentProcId
      
          currentProcId = GetCurrentProcessId
      
          Set oServ = GetObject("winmgmts:")
          Set cProc = oServ.ExecQuery("Select * from Win32_Process where NAME = 'EXCEL.EXE'")
      
          For Each oProc In cProc
              If oProc.ProcessId <> currentProcId Then
                  Debug.Print oProc.Name, oProc.ProcessId
                  errReturnCode = oProc.Terminate()
              End If
          Next
      End Sub
      

      我在这里找到了这个https://answers.sap.com/questions/737136/sap-gui-74-patch-12---disallow-excel-auto-open.html

      祝你好运,祝你自动化愉快。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-19
        • 2022-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-08
        相关资源
        最近更新 更多