我在 UFT 中有一个 Web 自动化框架,我必须在其中更新自定义的 Excel 报告。在代码的报告编辑部分,我遇到了一个与 excel 进程/vba 对象相关的奇怪问题。我将这段代码存储在一个函数内的函数库 (.qfl) 中,它被调用了很多次。问题是,有时 UFT 执行冻结,我看到 EXCEL.exe 的运行进程。在我手动终止进程之前,屏幕上几个小时都没有任何反应。
On error resume next
Dim objExcel, objWorkbook, objWorkSheet
Set objExcel = createobject("excel.application")
objExcel.DisplayAlerts = False
Set objWorkbook = objExcel.Workbooks.Open("SheetLocation")
Set objWorkSheet = objWorkbook.WorkSheets("SheetName")
intStepRow = objWorkSheet.Cells.Find("WC_01").Row
objWorkSheet.Cells(intStepRow, 7).Value = "SomeValue"
objWorkSheet.Cells(intStepRow, 8).Value = "SomeValue"
objExcel.ActiveWorkbook.Save
objExcel.ActiveWorkbook.Close True
objExcel.Quit()
Set objWorkSheet = Nothing
Set objWorkbook = Nothing
Set objExcel = Nothing
On error goto 0
我尝试在函数末尾放置一段代码来终止进程,但没有成功。我还尝试将
excel.Visible
和 .Display
设置为 true
以查看到底哪里出了问题,但我什么也没看到。我也尝试删除错误处理但同样,没有运气。
编辑:
为每一行启用日志记录后,我发现下面一行冻结了执行
Set objWorkbook = objExcel.Workbooks.Open("SheetLocation")
提前感谢您的时间和建议:)
我遇到了同样的问题,有时甚至在执行与 excel 相关的代码部分之前,UFT 就停止响应。
必须将代码保存在 .vbs 文件中并使用 SystemUtil.Run fileName.vbs 调用
或者我觉得它很有趣,你能不能在你 realese 对象后尝试使用 objExcel.quit() ,即在你设置 wroksheet、workbook、excel = nothing 之后。 例如
Set objWorkSheet = Nothing
Set objWorkbook = Nothing
Set objExcel = Nothing
objExcel.Quit()