2011-01-26 7 views
4

je suis tombé sur le lien suivant:Création de requêtes SQL paramétrées dans Excel 2010 avec VBA

http://www.informit.com/guides/content.aspx?g=sqlserver&seqNum=135

Dans ce document, on trouve une liste de code relativement simple pour interroger la base de données SQL à partir d'Excel VBA.

' Declare the QueryTable object 
Dim qt As QueryTable 

' Set up the SQL Statement 
sqlstring = "select au_fname, au_lname from authors" 

' Set up the connection string, reference an ODBC connection 
' There are several ways to do this 
' Leave the name and password blank for NT authentication 
connstring = _ 
"ODBC;DSN=pubs;UID=;PWD=;Database=pubs" 

' Now implement the connection, run the query, and add 
' the results to the spreadsheet starting at row A1 
With ActiveSheet.QueryTables.Add(Connection:=connstring, Destination:=Range("A1"), Sql:=sqlstring) 
.Refresh 
End With 
'Save and close the macro, and run it from the same menu you accessed in step 2. 

Cela fonctionne très bien. Cependant, je veux être en mesure de récupérer une valeur (s) en tant que variable au lieu de le jeter à Excel.

Quelqu'un peut-il m'aider avec ça? J'ai essayé de chercher des tutoriels Excel VBA SQL, mais il semble que la moitié du code que je trouve ne fonctionne pas (peut-être parce que je ne le comprends pas assez bien).

Répondre

3

Vous pouvez utiliser ADO, par exemple:

''Reference: Microsft ActiveX Data Objects x.x Library 
Dim cmd As New ADODB.Command 
Dim cn As New ADODB.Connection 
Dim param1 As New ADODB.Parameter 
Dim rs As ADODB.Recordset 

With cn 
    .Provider = "SQLOLEDB" 
    ''See also http://connectionsstrings.com 
    .ConnectionString = "Data Source=Server;Initial Catalog=test;Trusted_Connection=Yes" 
    .Open 
End With 

Set param1 = cmd.CreateParameter("@SiteID", adBigInt, adParamInput) 
param1.Value = 1 
cmd.Parameters.Append param1 

With cmd 
    .ActiveConnection = cn 
    ''Stored procedure 
    .CommandText = "spSiteInformation_Retrieve" 
    .CommandType = adCmdStoredProc 

    Set rs = .Execute 
End With 

For Each f In rs.Fields 
    Debug.Print f.Name; " "; f 
Next 

rs.Close 
Set rs = Nothing 
cn.Close 
Set cn = Nothing 

Informations complémentaires: http://w3schools.com