鉴于Excel {1}的优点,我决定使用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工作表中单元格范围的名称。上面提到的一段代码工作完美,提供的单元格范围是两个或更多单元格的名称。我发现使用命名单元格范围而不是使用'sheetname'和/或'row and column positions'非常有用
现在,当我只命名一个单元格并使用上面的代码时,抛出异常
” Microsoft Jet数据库引擎找不到对象'qwerty'。确保对象存在,并且您正确拼写其名称和路径名
代码:80040E37
“
在我看来,仅当范围使用2个或更多个单元格时,才能使用范围(命名单元格)获取数据。这是对的吗?如果是这样,那么如何才能获取一个命名单元格的数据?
~T
答案 0 :(得分:0)
以下两个示例对我都有用,正如您所看到的,除了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