【发布时间】:2017-10-08 17:38:54
【问题描述】:
UFT 版本:12.02(内部版本:2374)
操作系统:Windows 7(64 位)
在我的应用程序中,有一个 DataGrid 和一个“导出到 Excel 按钮”。当我单击该按钮时,将打开一个 excel 文件(Data.xlsx),其中包含网格中存在的所有数据。我只需要将这个 excel 文件保存到某个位置。我正在使用“GetObject”方法来获取对打开的 Excel 文件的引用,如下面的代码所示。
问题:当我在调试模式下运行此代码时,它工作正常,我没有收到任何错误,并且 Excel 成功保存在正确的位置。但是当我运行相同的代码(Normal Run-not in Debug)时,我得到如下所示的错误代码:429(ActiveX 组件无法创建对象')。 我不知道为什么我在正常运行中遇到此问题。
代码:
Dim l_objExcel, l_objExcelBook
Execute "Set l_objExcel = GetObject(,""Excel.Application"")" 'getting error 429 here in Normal Run
'I could have just used- Set l_objExcel = GetObject(,"Excel.Application") but it doesn't seem to work. It throws the syntax error(Expected Expression) at this line
Set l_objExcelBook = l_objExcel.ActiveWorkBook
l_objExcelBook.SaveAs strSavePath 'strSavePath contains the File save location
l_objExcelBook.Close
l_ObjExcel.Quit
Set l_objExcelBook = Nothing
Set l_objExcel = Nothing
编辑1: 如果我在代码中使用以下行,则会收到附件图像中显示的语法错误。
Set l_objExcel = GetObject("",""Excel.Application"")
编辑 2: 只是一个总结,
-
如果我使用以下行,我在调试期间不会收到任何错误,但在正常运行期间会收到错误 429。
Execute "Set l_objExcel = GetObject(,""Excel.Application"")" -
如果我使用下面的行,我会收到语法错误“预期表达式”
Set l_objExcel = GetObject(,"Excel.Application") -
如果我使用以下行,我不会在此行收到任何错误,但会在我尝试保存文件的行中开始收到错误 424(Object required)。
Set l_objExcel = GetObject("","Excel.Application")
【问题讨论】:
-
UFT对它的GetObjectExcel 调用很有趣,试试这样:Set l_objExcel = GetObject("",""Excel.Application"") -
@dave 听起来很有希望,我从未使用过 UFT,只是知道通常该错误意味着什么。我能想到的一个例子是,如果 OP 使用 Excel 32 位但 UFT 正在运行 64 位脚本,它不会在 64 位注册表中找到 64 位 Excel
ProgId,因为只安装了 32 位版本。 -
This answer 在 Web 环境中处理 COM,但原理是相同的(忽略 Web 特定的东西),看看“如果你不这样做会怎样不知道 DLL 在哪里?”和“如何在 Windows 中注册 COM DLL”部分,了解如何在 Windows 注册表中注册 COM。
-
@GMan,对不起,我直接从您的帖子中复制了您的
GetObject电话 - 我的意思是建议您使用Set l_objExcel = GetObject("","Excel.Application")并且不要留下额外的双引号(您只需要因为Execute调用需要一个字符串参数) -
@Gman 在我看来就像您在脚本中转义引号,但也在调试期间,调试中的行应该是
Set l_objExcel = GetObject("","Excel.Application")不需要转义""。