TOP

استعلام SQL باستخدام VBA Excel

YouLibreCalc for Excel logo

وصف

هناك طرق عديدة للحصول على البيانات من مصادر خارجية في ورقة العمل Excel . في هذه المقالة، سننظر في كيفية الاستعلام عن البيانات من ملف قاعدة البيانات MS Access ومن ملف Excel باستخدام SQL في VBA . نعم، سنقوم بخلطها قليلاً SQL مع VBA ! وهذا أفضل مما قد تعتقد!

SQL تمثل Structured Query Language (لغة الاستعلام المنظمة) وهي لغة تستخدم لاسترداد المعلومات من قواعد البيانات (مثل MS Access, MS SQL Server, Oracle, Sybase, SAP, MySQL و اخرين).

يمكنك أيضًا الحصول على البيانات من الإنترنت أو الملفات النصية أو غيرها من ملفات Excel أو CSV ملفات.


1. استعلام SQL من Excel VBA إلى ملف MS Access

لذلك نحن بحاجة إلى اتصال بقاعدة البيانات (متغير varConn في الماكرو أدناه) و استعلام SQL (عامل varSQL ) لأتمتة عملية استرجاع البيانات من قاعدة البيانات الخاصة بالتقرير. في المثال أدناه هناك استعلام SQL الذي يتلقى البيانات من قاعدة بيانات صغيرة في MS Access.

انقر تحميل قاعدة البيانات MS Access (test.mdb) .

سيبدو ملف MS Access كما يلي:

دعونا نكتب الماكرو الذي سيتم تنفيذه استعلام SQL .

افتح القائمة الخدمة - ماكرو - المحرر Visual Basic , أدخل الوحدة الجديدة (قائمة طعام Inser - Module ) وانسخ نص الماكرو هناك:

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 

انقر فوق حفظ والعودة إلى Excel. اختر من القائمة عرض - وحدات الماكرو (Alt+F8) اسم الماكرو الخاص بنا " SQLQuery_1 ". سيظهر مربع حوار، اضغط عليه قاعدة البيانات... ، ابحث عن ملف Access الخاص بنا وانقر فوق ОК .

الآن يمكننا أن نرى أن استعلام الماكرو الخاص بنا قد قام بسحب الأعمدة Month , Product و City من الطاولة Sumproduct من قاعدة البيانات test.mdb لملف Excel.

2. استعلام SQL من VBA إلى الملف المغلق Excel

وبالمثل، يمكننا الحصول على البيانات من ملف Excel عادي كما لو كان من قاعدة بيانات. لهذا، يجب إعادة كتابة كود الماكرو الخاص بنا قليلاً وتغيير برنامج تشغيل الاتصال من Access إلى Excel.

نقوم بتصدير الجدول Sumproduct من Access في Excel واحفظ الملف. بعد ذلك، نقوم بإدخال الكود المعدل في وحدة جديدة وتشغيل الماكرو:

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 

ستظهر نافذة حيث يمكننا تحديد ملف Excel الخاص بنا (يجب تسميته Sumproduct.xlsx أو بامتداد آخر). نجد واختياره. دعونا نضغط ОК ، ونحصل على نفس البيانات من ملف Access.

مقالات حول الموضوع: