Classe QueryTables (Excel VBA)

Collection d'objets QueryTable . Pour utiliser une variable de classe QueryTables, elle doit d'abord être instanciée, par exemple


Dim qts as QueryTables
Set qts = ActiveSheet.QueryTables

For Each

Voici un exemple de traitement des éléments QueryTables dans une collection


Dim qrytbl As QueryTable
For Each qrytbl In Application.QueryTables
	
Next qrytbl

Add

Crée une table de requêtes.

Une requête créée par cette méthode n’est pas exécutée tant que la méthode Refresh n’est pas appelée.

Add (Connection, Destination, Sql)


Dim cnnConnect As ADODB.Connection 
Dim rstRecordset As ADODB.Recordset 
 
Set cnnConnect = New ADODB.Connection 
cnnConnect.Open "Provider=SQLOLEDB;" & _ 
    "Data Source=srvdata;" & _ 
    "User ID=testac;Password=4me2no;" 
 
Set rstRecordset = New ADODB.Recordset 
rstRecordset.Open _ 
    Source:="Select Name, Quantity, Price From Products", _ 
    ActiveConnection:=cnnConnect, _ 
    CursorType:=adOpenDynamic, _ 
    LockType:=adLockReadOnly, _ 
    Options:=adCmdText 
 
With ActiveSheet.QueryTables.Add( _ 
        Connection:=rstRecordset, _ 
        Destination:=Range("A1")) 
    .Name = "Contact List" 
    .FieldNames = True 
    .RowNumbers = False 
    .FillAdjacentFormulas = False 
    .PreserveFormatting = True 
    .RefreshOnFileOpen = False 
    .BackgroundQuery = True 
    .RefreshStyle = xlInsertDeleteCells 
    .SavePassword = True 
    .SaveData = True 
    .AdjustColumnWidth = True 
    .RefreshPeriod = 0 
    .PreserveColumnInfo = True 
    .Refresh BackgroundQuery:=False 
End With

Arguments

Les arguments nommés :

Connection (String) - Source de données pour la table de requêtes. Il peut s'agir d'un des éléments suivants : Chaîne contenant une chaîne de connexion OLE DB ou ODBC. La chaîne de connexion ODBC se présente ODBC;sous la forme. Objet QueryTable à partir duquel les informations de requête sont copiées initialement, incluant la chaîne de connexion et le texte SQL, mais pas la place Destination. La spécification de l'objet QueryTable a pour effet que l'argument Sql est ignoré. Objet Recordset ADO ou DAO. Les données sont lues à partir du recordset ADO ou DAO. Microsoft Excel conserve le recordset jusqu'à ce que la table de requêtes soit supprimée ou la connexion modifiée. La table de requêtes résultante ne peut pas être modifiée. Une requête Web. Chaîne dans le formulaire URL; où URL; est requis mais pas localisé et le reste de la chaîne est utilisé pour l’URL de la requête Web. Recherche de données. Chaîne dans le formulaire FINDER; où FINDER; est requis mais pas localisé. Le reste de la chaîne est le chemin d’accès et le nom de fichier d’un fichier de recherche de données (*. dqy ou *. iqy). Le fichier est lu lorsque la méthode Add est exécutée; les appels ultérieurs à la propriété Connection de la table de requête renvoient ODBC; les URL; chaînes commençant par ou selon le cas. Fichier texte. Chaîne dans le formulaire TEXT; où TEXT; est requis mais pas localisé.

Destination (Range) - Cellule dans l'angle supérieur gauche de la plage de destination de la table de requêtes (plage dans laquelle la table de requêtes résultante sera placée). La table de destination doit figurer sur la feuille de calcul contenant l'objet QueryTables spécifié par l'expression.

Optional arguments

Les arguments suivants sont facultatifs

Sql (QueryTable) - Chaîne de requête SQL à exécuter sur la source de données ODBC. Cet argument est facultatif lorsque vous utilisez une source de données ODBC (si vous ne spécifiez pas cette valeur ici, vous devez la définir à l’aide de la propriété SQL de la table de requête avant l’actualisation de la table). Vous ne pouvez pas utiliser cet argument si un objet QueryTable, un fichier texte, ou un objet Recordset ADO ou DAO est spécifié comme source de données.

Count

Cette propriété renvoie une valeur de type Long qui représente le nombre d’objets de la collection.


Dim lngCount As Long
lngCount = ActiveSheet.QueryTables.Count

Item

Cette méthode renvoie un seul objet d'une collection.

Item (Index)

Index: Nom ou numéro d'index de l'objet.


Dim qrytbl As QueryTable
Set qrytbl = ActiveSheet.QueryTables(Index:=1)