2008-10-23 4 views
0

Salutations,Nourrir un objet Excel QueryTable de la mémoire

Le code VBA ci-dessous va créer un objet Excel QueryTable et l'afficher à partir de la plage (« D2 »). L'adresse spécifique de cette plage cible est immatérielle.

Ma question est - est-il possible d'introduire manuellement des valeurs dans un jeu d'enregistrements en mémoire, puis d'en faire lire la table? En d'autres termes, je souhaite spécifier les colonnes et les valeurs de la table dans VBA, et non celles provenant d'une base de données ou d'un fichier.

Public Sub Foo() 

    Dim blah As QueryTable 
    Dim rngTarget As Range 

    Dim strQuery As String 

    strQuery = "SELECT * FROM MY_TABLE" 
    Set rngTarget = Range("D2") 
    Dim qt As QueryTable 
    Set qt = rngTarget.Worksheet.QueryTables.Add(Connection:= _ 
     "ODBC;DRIVER=SQL Server;SERVER=MY_SQL_SERVER;APP=MY_APP;Trusted_Connection=Yes", Destination:=rngTarget) 

    With qt 
     .CommandText = strQuery 
     .FieldNames = True 
     .RowNumbers = False 
     .FillAdjacentFormulas = False 
     .PreserveFormatting = True 
     .RefreshOnFileOpen = False 
     .BackgroundQuery = False 
     .Name = "MY_RANGE_NAME" 
     .MaintainConnection = False 
     .RefreshStyle = xlOverwriteCells 
     .SavePassword = False 
     .SaveData = False 
     .AdjustColumnWidth = False 
     .RefreshPeriod = 0 
     .PreserveColumnInfo = False 
     .Refresh BackgroundQuery:=False 
    End With 

End Sub 
+0

C'est ce que j'ai fini par faire, sauf une version de Web Query, mais pour Excel, c'est la même chose. Vous supprimez simplement la table de requête après avoir exécuté la méthode .Refresh. – AlanR

Répondre

2

Oui, bien sûr.

Dim vConnection As Variant, vCommandText As Variant 
    Dim r As ADODB.Recordset 
    Dim i As Long 

    'Save query table definition 
    vConnection = QueryTable.Connection 
    vCommandText = QueryTable.CommandText 


    Set r = New ADODB.Recordset 
    <populate r> 

    Set QueryTable.Recordset = r 
    QueryTable.Refresh False 

    'Restore Query Table definition 
    Set QueryTable.Recordset = Nothing 
    QueryTable.Connection = vConnection 
    QueryTable.CommandText = vCommandText 
0

De la VB Aide Excel Le paramètre de connexion peut être:..

« Un ADO ou DAO objet Recordset Les données sont lues à partir de l'ADO ou DAO recordset Microsoft Excel conserve le jeu d'enregistrements jusqu'à ce que la table de requête est supprimé ou la connexion est modifiée La table de requête qui en résulte ne peut pas être éditée "

Alors oui, il semble que vous pouvez le faire.