عندما نستخدم برمجة Excel، غالبًا ما نحتاج إلى استخدام قاعدة بيانات.
فكيف تتصل بقاعدة البيانات ثم تقرأ البيانات من قاعدة البيانات؟
يتصل VBA بمثيل قاعدة بيانات SQL SERVER:
Dim strConn As String، strSQL As String Dim conn As ADODB.Connection Dim ds As ADODB.Recordset Dim col As Integer 'String للاتصال بقاعدة البيانات strConn = "Provider=SQLOLEDB.1;معلومات الأمان المستمرة=True;معرف المستخدم=[ المستخدم ];كلمة المرور=[كلمة المرور];الكتالوج الأولي=[قاعدة البيانات];مصدر البيانات=[عنوان IP لقاعدة البيانات أو اسم خادم قاعدة البيانات];اتصال Timeout=720; " 'بيان الاستعلام، إذا كانت عبارة SQL طويلة جدًا، فيمكنك استخدام strSQL=strSQL+ لربط العبارات المقسمة إلى فقرات متعددة. إذا كانت العبارة قصيرة جدًا، فيمكنك كتابتها فقط في سطر واحد. strSQL = "select * from Hy_KPI_Shop_Dept_WeekRpt" strSQL = strSQL+"حيث sdate='2014-01-01' ترتيب حسب sdate,shopid "Set conn = New ADODB.Connection Set ds = New ADODB.Recordset 'فتح اتصال قاعدة البيانات conn.Open strConn 'هذه الجملة والاتصال في سلسلة اتصال قاعدة البيانات المهلة = 720 تعني أنه إذا تم تشغيل العبارة لفترة طويلة، فيمكن أن تقوم هاتان الجملتان بتمديد وقت انتظار VBA. بدون هاتين الجملتين، سيقوم VBA غالبًا بالإبلاغ عن انتهاء مهلة الاستعلام. conn.CommandTimeout = 720 باستخدام ds 'الحصول على البيانات وفقًا لبيان الاستعلام. افتح strSQL، conn' التحكم تلقائيًا في إضافة كافة رؤوس الأعمدة لـ col = 0 إلى ds.Fields.Count - 1 'يرجى ملاحظة أن المعلمات في Offset( 0, col) يجب أن تكون صحيحة، وتعني هذه الجملة أنه سيتم كتابة العنوان في الصف الأول، بدءًا من الخلية A1. إذا كنت لا تريد كتابة صف العنوان، فيمكنك التعليق على الجملة التالية. Worksheets("تقرير KPI الأسبوعي لكل فصل في المتجر").Range("A1").Offset(0, col).Value = ds.Fields(col).Name Next 'أضف كافة صفوف البيانات، هذه الجملة تعني أنه سيتم كتابة نتائج الاستعلام في الصف الأول، ويبدأ من الخلية A1، ولكن بما أن صف العنوان مكتوب في الصف الأول، فإن هذا الصف يتم كتابته فعليًا من صف أسفل العنوان. أوراق العمل("ورقة1").Range("A1").Offset(1, 0).CopyFromRecordset ds End بـ 'أغلق اتصال قاعدة البيانات وامسح الموارد Set ds = لا شيء conn.Close Set conn = لا شيء