Lorsque nous utilisons la programmation Excel, nous devons souvent utiliser une base de données.
Alors, comment se connecter à la base de données puis lire les données de la base de données ?
VBA se connecte à l'instance de base de données SQL SERVER :
Dim strConn As String, strSQL As String Dim conn As ADODB.Connection Dim ds As ADODB.Recordset Dim col As Integer 'String pour se connecter à la base de données strConn = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=[ utilisateur ];Password=[mot de passe];Catalogue initial=[base de données];Source de données=[adresse IP de la base de données ou nom du serveur de base de données];Connecter Timeout=720; " 'Instruction de requête, si l'instruction SQL est très longue, vous pouvez utiliser strSQL=strSQL+ pour connecter les instructions divisées en plusieurs paragraphes. Si l'instruction est très courte, vous ne pouvez l'écrire que sur une seule ligne. strSQL = "select * from Hy_KPI_Shop_Dept_WeekRpt " strSQL = strSQL+"where sdate='2014-01-01' order by sdate,shopid " Set conn = New ADODB.Connection Set ds = New ADODB.Recordset 'Ouvrir la connexion à la base de données conn.Open strConn 'Cette phrase et Connect à la chaîne de connexion à la base de données Timeout=720 signifie que si l'instruction s'exécute pendant une longue période, ces deux phrases peuvent prolonger le temps d'attente de VBA. Sans ces deux phrases, VBA signalera souvent un délai d'attente de requête. conn.CommandTimeout = 720 Avec ds 'Obtenir des données selon l'instruction de requête. Ouvrez strSQL, conn 'Contrôler automatiquement l'ajout de tous les en-têtes de colonnes Pour col = 0 Pour ds.Fields.Count - 1 'Veuillez noter que les paramètres dans Offset( 0, col) doit être Pour être correct, cette phrase signifie que le titre sera écrit dans la première ligne, à partir de la cellule A1. Si vous ne souhaitez pas écrire la ligne de titre, vous pouvez commenter la phrase suivante. Worksheets("Rapport hebdomadaire KPI pour chaque classe du magasin").Range("A1").Offset(0, col).Value = ds.Fields(col).Name Next 'Ajoutez toutes les lignes de données, cette phrase signifie que les résultats de la requête seront écrits dans la première ligne, cela commence à partir de la cellule A1, mais comme la ligne de titre est écrite dans la première ligne, cette ligne est en fait écrite à partir d'une ligne située sous le titre. Worksheets("sheet1").Range("A1").Offset(1, 0).CopyFromRecordset ds End With 'Fermez la connexion à la base de données et effacez les ressources Set ds = Nothing conn.Close Set conn = Nothing