1

ここで説明した ExcelADO の利点を考慮して、QTP Automation に Excel ADO を使用することにしました。だからここに私が使用したコードがあります -

'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 シートのセル範囲の名前です。セル範囲が2つ以上のセルの名前である場合、上記のコードは完璧に機能します。「シート名」や「行と列の位置」を使用する代わりに、名前付きのセル範囲を使用すると非常に便利です。

1つのセルに名前を付けて上記のコードを使用すると、次の例外がスローされます

" Microsoft Jet データベース エンジンはオブジェクト 'qwerty' を見つけることができませんでした。オブジェクトが存在すること、およびその名前とパス名のつづりが正しいことを確認してください

コード: 80040E37

"

範囲が2つ以上のセルを使用する場合にのみ、範囲(名前付きセル)を使用してデータを取得できるように見えます。それが正しいか?もしそうなら、どうすれば1つの名前付きセルだけのデータを取得できますか?

〜T

4

1 に答える 1

0

以下の両方の例は私にとってはうまくいきます。ご覧のとおり、IMEX = 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
于 2010-02-11T09:44:18.440 に答える