【发布时间】:2022-01-24 06:15:30
【问题描述】:
我有一个每天在 VBA 中运行的 SAP GUI 脚本。在脚本中,我将一些数据从 SAP 导出到几个不同的 Excel 文件,并将这些文件保存到网络驱动器。在第一个宏中,我正在导出数据。在第二个中,我将数据复制到与脚本所在的工作簿相同的工作簿中。
奇怪的是,有时脚本会运行得很好,而有时我会收到运行时错误“下标超出范围”。错误来自这一行@ 987654321@。所以看起来 Excel 文件没有被识别为打开。然后我需要手动关闭 Excel,然后重新打开它,然后脚本就会成功运行。
我试图在给出错误的Set ws2 行前面插入下面的代码,而这段代码总是给出文件打开的消息。
Dim Ret
Ret = IsWorkBookOpen(filepath & "FEBA_EXPORT_" & today2 & ".XLSX")
If Ret = True Then
MsgBox "File is open"
Else
MsgBox "File is Closed"
End If
这是函数:
Function IsWorkBookOpen(FileName As String)
Dim ff As Long, ErrNo As Long
On Error Resume Next
ff = FreeFile()
Open FileName For Input Lock Read As #ff
Close ff
ErrNo = Err
On Error GoTo 0
Select Case ErrNo
Case 0: IsWorkBookOpen = False
Case 70: IsWorkBookOpen = True
Case Else: Error ErrNo
End Select
End Function
这是代码的相关部分:
Sub CopyExportedFEBA_ExtractFEBRE()
Dim SapGuiAuto As Object
Dim SAPApp As Object
Dim SAPCon As Object
Dim session As Object
Set SapGuiAuto = GetObject("SAPGUI")
Set SAPApp = SapGuiAuto.GetScriptingEngine
Set SAPCon = SAPApp.Children(0)
Set session = SAPCon.Children.ElementAt(0) ' <--- Assumes you are using the first session open. '
Dim ws0, ws1, ws2, ws6, ws7 As Worksheet
Set ws0 = Workbooks("FEB_BSPROC.xlsm").Worksheets("INPUT")
Set ws1 = Workbooks("FEB_BSPROC.xlsm").Worksheets("FEB_BSPROC")
Set ws6 = Workbooks("FEB_BSPROC.xlsm").Worksheets("FBL3N_1989")
Dim today2, filepath As String
today2 = ws0.Range("E2")
filepath = ws0.Range("A7")
' Check if if FEBA_EXPORT wb is open
' This is giving the message that the file is open
Dim Ret
Ret = IsWorkBookOpen(filepath & "FEBA_EXPORT_" & today2 & ".XLSX")
If Ret = True Then
MsgBox "File is open"
Else
MsgBox "File is Closed"
End If
' This is giving runtime error 9 Subscript out of range
' If manually close the Excel and the reopen, then it will always work after this
Set ws2 = Workbooks("FEBA_EXPORT_" & today2 & ".XLSX").Worksheets("Sheet1")
'This is never giving any errors
Set ws7 = Workbooks("1989_" & today2 & ".XLSX").Worksheets("Sheet1")
filepath 变量是网络驱动器的完整文件路径:\\fisv00j-55\UiPath\UiPath_PEC\InputFilesForRobots\PEC-TR-002-FEB_BSPROC\SAP_EXTRACTS\,所以这不是问题。此外,我还有另一个以相同方式打开的 Excel,并且从未出现任何错误。
today2 变量也是正确的。
我认为如果我可以使用 VBA 关闭 ws2 工作簿然后重新打开它,它会起作用。所以我试图关闭它而不将其设置为变量,但后来我得到了同样的错误。我真的不知道如何让这个脚本始终如一地工作。
有人遇到过类似的问题吗?当您将任何内容导出到 Excel 文件时,使用 SAP GUI 脚本,文件将在保存后自动打开。我想知道这可能是问题吗?但奇怪的是,我只有这个 Excel 文件有问题,而其他几个以相同方式保存和打开的文件中的任何一个都没有。
【问题讨论】:
-
有时 SAP 会将文件导出到由它创建的新 Excel 会话。而您的检查方式只能证明它在某处开放。