【问题标题】:ExcelADO - Using Range to fetch data from excel using VBScriptExcelADO - 使用 Range 使用 VBScript 从 excel 中获取数据
【发布时间】:2010-02-11 05:39:02
【问题描述】:

鉴于here 所述的 ExcelADO 的优势,我决定使用 Excel ADO 进行 QTP 自动化。所以这是我使用的代码 -

'Open the ADO connection to the Excel workbook
Dim oConn
Set oConn = CreateObject("ADODB.Connection")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
           "Data Source=D:\Mine\QTP\Book1.xls;" & _
           "Extended Properties=""Excel 8.0;HDR=NO;"""  


'Set Record Set Object       
Dim oRS 
Set oRS = CreateObject("ADODB.Recordset")

'Execute Query 
oRS.Open "Select * from qwerty", oConn, adOpenStatic 

'Get String
a = oRs.GetString() 

在上述查询中,'qwerty' 是 Excel 工作表中单元格区域的名称。只要单元格范围是两个或多个单元格的名称,上述代码就可以完美运行。我发现使用命名单元格区域而不是使用“工作表名称”和/或“行和列位置”非常有用

现在,当我只命名一个单元格并使用上面的一段代码时,会引发以下异常

" Microsoft Jet 数据库引擎找不到对象“qwerty”。确保对象存在并且正确拼写其名称和路径名

代码:80040E37

"

在我看来,只有当范围使用 2 个或更多单元格时,才能使用范围(命名单元格)获取数据。这是正确的吗?如果是这样,那么我怎样才能只为一个命名单元格获取数据?

~T

【问题讨论】:

    标签: vbscript qtp


    【解决方案1】:

    如您所见,下面的两个示例都适用于我,它与您的示例非常相似,除了 IMEX=1,这可能会或可能不会有所不同。

    MsgBox fExcelCellADO ("c:\docs\book1.xls","sheet1$b2:b2")
    MsgBox fExcelCellADO ("c:\docs\book1.xls","therange")
    
    Function fExcelCellADO(strFileName, strCell)
    
        Dim cn 
        Dim rs 
    
        Set cn = CreateObject("ADODB.Connection")
        cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
                 & "Data Source=" & strFileName & ";" _
                 & "Extended Properties='Excel 8.0;HDR=No;IMEX=1';"
    
        Set rs = CreateObject("ADODB.Recordset")
        rs.Open "SELECT F1 FROM [" & strCell & "]", cn
        fExcelCellADO = rs.fields("F1")
    
        rs.Close
        Set rs = Nothing
        cn.Close
        Set cn = Nothing
    
    End Function
    

    【讨论】:

    • 您使用的是哪个版本的 Excel。我的是 excel 2003。
    猜你喜欢
    • 2015-06-06
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多