2010-02-11 7 views
1

Étant donné les avantages d'ExcelADO comme décrit here, j'ai décidé d'utiliser Excel ADO pour l'automatisation QTP. Donc, est ici le code que j'ai utilisé -ExcelADO - Utilisation de la plage pour extraire des données à partir d'Excel en utilisant VBScript

'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() 

Dans la requête mentionnée ci-dessus « azerty » est le nom de la plage de cellules dans Excel. Le morceau de code mentionné ci-dessus fonctionne parfaitement à condition que la plage de cellules fournie soit le nom de deux ou plusieurs cellules. Je trouve qu'il est très utile d'utiliser une plage de cellules nommée au lieu d'utiliser « sheetname » et/ou « rangée et les positions de la colonne »

Maintenant, quand je nomme une seule cellule et l'utilisation ci-dessus pièce d'exception de code puis en suivant est lancé

« moteur de base de données Microsoft Jet n'a pas pu trouver l'objet « azerty » Assurez-vous l'objet existe et que vous épeler son nom et le chemin d'accès correctement

. code: 80040e37

»

Il me semble que les données peuvent être récupérées en utilisant la plage (cellules nommées) uniquement lorsque la plage utilise 2 cellules ou plus. Est-ce correct? Si oui, comment puis-je récupérer des données pour une seule cellule nommée?

~ T

Répondre

0

Les deux l'exemple ci-dessous travail pour moi, comme vous pouvez le voir, il est très similaire à votre exemple, sauf pour IMEX = 1, ce qui peut ou ne peut pas faire une différence.

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 
+0

Quelle version d'Excel utilisez-vous? Le mien est excellent 2003. – Tarun