【发布时间】:2021-04-01 05:34:10
【问题描述】:
我有一个宏代码,它从 SAP 下载一个 excel 文件,发布后它应该对其进行一些数据处理以到达我的最终输出文件。代码下载并打开了 excel 文件。但是,每次该对象超出范围时,它仍然会显示错误。一旦我单击 excel 表中的某个位置并继续运行我的代码,它就可以完美运行。如何避免这种人工干预。请多多指教。
If Not IsObject(App) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set App = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
Set Connection = App.Children(0)
End If
If Not IsObject(session) Then
Set session = Connection.Children(0)
End If
If IsObject(WScript) Then
WScript.ConnectObject session, "on"
WScript.ConnectObject App, "on"
End If
session.findById("wnd[0]").maximize
session.findById("wnd[0]/usr/txtRSYST-BNAME").Text = "stark"
session.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = "*****"
session.findById("wnd[0]/usr/pwdRSYST-BCODE").SetFocus
session.findById("wnd[0]/usr/pwdRSYST-BCODE").caretPosition = 12
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/tbar[0]/okcd").Text = "ABC01"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/radMADE").SetFocus
session.findById("wnd[0]/usr/radMADE").Select
session.findById("wnd[0]/mbar/menu[0]/menu[0]").Select
session.findById("wnd[0]/mbar/menu[0]/menu[3]/menu[1]").Select
session.findById("wnd[1]/usr/ctxtDY_PATH").Text = "C:\Users\Stark\Desktop\SAP Scripting"
session.findById("wnd[1]/usr/ctxtDY_PATH").SetFocus
session.findById("wnd[1]/usr/ctxtDY_PATH").caretPosition = 44
session.findById("wnd[1]/tbar[0]/btn[0]").press
Windows("EXPORT.xlsx").Activate
Range("AA1").Select
ActiveCell.FormulaR1C1 = "1"
Range("AA1").Select
Selection.Copy
Range("B2:D2").Select
Range(Selection, Selection.End(xlDown)).Select
文件总是以 EXPORT.xlsx 的形式下载。我在Windows("EXPORT.xlsx").Activate 收到错误消息
一旦我手动输入工作表并继续运行代码,它就会工作。
请多多指教。
【问题讨论】:
-
您确定导出的
xlsx文件在同一个 Excel 会话中打开了吗?请使用任务管理器,看看您可以看到多少个 Excel 会话。并避免使用Windows和激活。尝试设置变量Set wbE = Workbooks("EXPORT.xlsx")。或者在所有打开的工作簿之间进行迭代并搜索名称为“EXPORT.xlsx”的工作簿。这样的代码能找到吗? -
或者,如果此操作需要一些时间,您的代码可能需要等待工作簿下载并打开...
-
如果您在现有会话中找到它,您可以尝试在所有现有工作簿之间循环搜索讨论中的工作簿,每次迭代延迟一秒(使用
Application.Whait)。For each WB in Workbooks。If Wb.Name = "EXPORT.xlsx" Then。找到工作簿后,按照我上面的建议和Exit Do进行设置。如果它在同一个会话中,如果我的上述解释不够清楚,我可以提供一段代码。但现在我要离开办公室,我可以在几个小时内完成,届时我将在家...... -
它在同一个会话中。如果您可以分享代码,将会很有帮助。
-
好的,我现在开车..