TOP

استعلام SQL في Excel VBA

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

يرمز SQL إلى لغة الاستعلام الهيكلية وهي لغة تُستخدم لاسترداد المعلومات من قواعد البيانات (مثل 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. سيبدو ملف MS Access كما يلي:

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

افتح القائمة الخدمة - وحدات الماكرو - المحرر Visual Basic، insert وحدة نمطية جديدة (إدراج - قائمة الوحدة النمطية) وانسخ نص الماكرو هناك:

Sub SQLQuery_1()
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. حدد اسم الماكرو الخاص بنا "SQLQuery_1" في القائمة عرض - وحدات الماكرو (Alt+F8). سيظهر مربع حوار، انقر فوق قاعدة البيانات...، وابحث عن ملف Access الخاص بنا، ثم انقر فوق موافق.

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

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

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

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

Sub SQLQuery_2()
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.

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

  • استيراد البيانات من Access إلى Excel