【问题标题】:Script working in Debug Mode but not in Normal Run - Error Code: 429(ActiveX Component Can't Create Object')脚本在调试模式下工作但不在正常运行中 - 错误代码:429(ActiveX 组件无法创建对象')
【发布时间】: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: 只是一个总结,

  1. 如果我使用以下行,我在调试期间不会收到任何错误,但在正常运行期间会收到错误 429。

    Execute "Set l_objExcel = GetObject(,""Excel.Application"")"
    
  2. 如果我使用下面的行,我会收到语法错误“预期表达式”

    Set l_objExcel = GetObject(,"Excel.Application")
    
  3. 如果我使用以下行,我不会在此行收到任何错误,但会在我尝试保存文件的行中开始收到错误 424(Object required)。

    Set l_objExcel = GetObject("","Excel.Application")
    

【问题讨论】:

  • UFT 对它的GetObject Excel 调用很有趣,试试这样: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") 不需要转义 ""

标签: excel vbscript qtp hp-uft


【解决方案1】:

随便用

Set l_objExcel = GetObject( ,"Excel.Application")

它会显示语法错误,但忽略它,你的脚本会运行良好。

【讨论】:

    最近更新 更多