TOP

Interogare SQL folosind VBA Excel

Descriere

Există multe modalități de a obține date din surse externe într-o foaie de lucru Excel . În acest articol, vom analiza cum să interogăm datele dintr-un fișier de bază de date MS Access și dintr-un fișier Excel prin utilizarea SQL în VBA . Da, o să amestecăm puțin SQL cu VBA ! Și e mai bine decât ai putea crede!

SQL reprezintă Structured Query Language (limbaj de interogare structurat) și este un limbaj folosit pentru a prelua informații din baze de date (cum ar fi MS Access, MS SQL Server, Oracle, Sybase, SAP, MySQL si altii).

De asemenea, puteți obține date de pe Internet, fișiere text sau alte Excel sau CSV fișiere.


1. Interogare SQL de la Excel VBA la fișierul MS Access

Deci avem nevoie de o conexiune la baza de date (variabilă varConn în macroul de mai jos) și interogare SQL (variabil varSQL ) pentru a automatiza preluarea datelor din baza de date pentru raport. În exemplul de mai jos există interogare SQL , care primește date dintr-o bază de date mică în MS Access.

Clic încărcați baza de date MS Access (test.mdb) .

Fișierul MS Access va arăta astfel:

Să scriem macrocomanda noastră care se va executa interogare SQL .

Deschide meniul Serviciu - Macro - Editor Visual Basic , introduceți noul modul (meniul Insert - Module ) și copiați textul macro acolo:

Sub SQLQuery_1()
'moonexcel.com.ua
Dim varConn As String
Dim varSQL  As String

    Range("A1").CurrentRegion.ClearContents

    varConn = "ODBC;Driver={Microsoft Access Driver (*.mdb, *.accdb)}"

    varSQL = "SELECT Month, Product, City FROM Sumproduct"

         With ActiveSheet.QueryTables.Add(Connection:=varConn, Destination:=Range("A1"))
             .CommandText = varSQL
             .Refresh BackgroundQuery:=False
         End With
End Sub 

Faceți clic pe Salvați și reveniți la Excel. Alegeți din meniu Vizualizare - Macrocomenzi (Alt+F8) numele macrocomenzii noastre " SQLQuery_1 ". Va apărea o casetă de dialog, apăsați-o Bază de date... , căutați fișierul nostru Access și faceți clic ОК .

Acum putem vedea că interogarea noastră macro a ridicat coloanele Month , Product și City de la masă Sumproduct din baza de date test.mdb pentru a depune Excel.

2. Interogare SQL de la VBA la fișierul închis Excel

În mod similar, putem obține date dintr-un fișier obișnuit Excel ca dintr-o bază de date. Pentru aceasta, codul macrocomenzii noastre trebuie să fie ușor rescris și driverul de conexiune schimbat din Access la Excel.

Exportăm tabelul Sumproduct din Access în Excel și salvați fișierul. Apoi, inserăm codul nostru modificat într-un modul nou și rulăm macrocomanda:

Sub SQLQuery_2()
'moonexcel.com.ua
Dim varConn As String
Dim varSQL  As String

    Range("A1").CurrentRegion.ClearContents

    varConn = "ODBC;Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}"

    varSQL = "SELECT Month, Product, City FROM Sumproduct"

         With ActiveSheet.QueryTables.Add(Connection:=varConn, Destination:=Range("A1"))
             .CommandText = varSQL
             .Refresh BackgroundQuery:=False
         End With
End Sub 

Va apărea o fereastră în care putem selecta fișierul nostru Excel (ar trebui să fie numit Sumproduct.xlsx sau cu altă extensie). Îl găsim și îl selectăm. Hai să apăsăm ОК , și obținem aceleași date ca din fișierul Access.

Articole pe tema: