استيراد البيانات من قاعدة بيانات SQL في Excel 2003 مقابل Excel 2010 (VBA)

StackOverflow https://stackoverflow.com/questions/3926808

سؤال

لذلك ، تم ترقية شركتي أخيرًا إلى MS Office 2010. حتى الآن كنت أعمل في عام 2003. أنا مبرمج SQL ، وأقوم باستمرار بإنشاء تقارير في Excel تسحب البيانات من قاعدة البيانات الخاصة بنا. في معظم الوقت ، سأقوم بإنشاء وحدات ماكرو تقبل المعلمات التي سيقوم المستخدمون بتكتبها في خلايا محددة ، وتغيير الاستعلام ، ثم تحديثه وفقًا للمعلمات.

إليك مثال بسيط حقًا:

  1. في Excel 2003 سأفتح مصنفًا جديدًا.
  2. انقر فوق "بيانات" ثم "استيراد البيانات الخارجية" ثم "استعلام قاعدة البيانات الجديدة".
  3. يطالبك بعد ذلك باختيار مصدر بيانات ، لذلك أود تحديد قاعدة البيانات التي أردت الاستعلام عنها (والتي تم إعدادها باستخدام اتصال ODBC بالفعل).
  4. ثم ألغيت من Windows Windows Windows ، ثم عندما أكون في محرر استعلام Microsoft ، أدخل فقط في استعلامي.

    • للبساطة ، سأختار * من جدول يسمى Agents وهي مجرد قائمة من الوكلاء الذين يعملون للشركة و EmployeeIds.

    • select * from Agents

  5. ثم أنا "X" خارج محرر الاستعلام ، وملبع يسمى "استيراد بيانات" حيث يسأل أين تريد وضع البيانات: في ورقة عمل موجودة؟ ورقة عمل جديدة؟ إلخ. أنا فقط أعيد البيانات في ورقة العمل الحالية التي تبدأ في الخلية A2

إذن ، أكتب هذا الماكرو البسيط في محرر Visual Basic في وحدة نمطية للمصنف:

Sub Refresh()

Dim oQuery as QueryTable
Dim oAgent as String

set oQuery = Sheet1.QueryTables(1)

oAgent = Sheet1.Range("A1")

oQuery.CommandText = "select * from Agents where Agent = '"+oAgent+"'"
oQuery.Refresh

End Sub

أقوم بإنشاء زر يقوم بتشغيل هذا الماكرو وألصقه B1. لذلك يفتح المستخدم التقرير ، ويقوم بتكوين اسم في A1, ، يضرب الزر ويأتي هذا الوكيل ومعرفهم في الجدول أدناه. حق حقا؟ لكن لا يمكنني الحصول على هذا للعمل في Excel 2010.

فيما يلي خطواتي والخطأ التالي:

  1. أفتح Excel 2010 ، وأذهب إلى علامة التبويب "البيانات".
  2. ضمن القسم "احصل على بيانات خارجية" ، انقر فوق "من مصادر أخرى" وحدد "من Mircrosoft Query" من المنسدلة.
  3. ثم يظهر مربع مصدر البيانات الذي يبرز وهو في الأساس هو نفس الخطوات 3،4 و 5 أعلاه.

ثم أكتب نفس الماكرو ، قم بإنشاء الزر وقم بتعيينه إلى Marco ، لكن عندما أنقر على الزر أحصل على الخطأ التالي:

Run-time error '9':
Subscript out of range

لقد ضربت تصحيح الأخطاء ويسلط تصحيح الأخطاء الضوء على هذا الخط

Set oQuery = Sheet1.QueryTables(1)

حاولت جعل هذا الخط أكثر تحديدا مثل ذلك:

Set oQuery = WorkBooks("Book 1").Sheets("Sheet 1").QueryTables(1)

لكنني فقط أحصل على نفس الخطأ.

لذا فإن ما أحتاج إلى معرفته في الأساس هو كيفية القيام بهذا النوع من الأشياء في Excel 2010. ولكن هنا ملاحظة مثيرة للاهتمام: إذا قمت بإنشاء هذا التقرير في Excel 2003 ، فاحفظه كـ .xls ، ثم افتحه في عام 2010 ، الشغل. يمكنني حتى حفظ نسخة كـ .xlsm ثم افتح ذلك وسيعمل مع هذا الماكرو نفسه. فقط عندما أقوم بإنشاء التقرير في عام 2010 ، لا يمكنني تشغيله. يبدو لسبب ما أنه لا يمكن العثور على الاستعلام لتغيير نص الأمر ثم التحديث. الرجاء المساعدة ، لقد عالقت في هذا لعدة أيام!

هل كانت مفيدة؟

المحلول

في XL2007 و 2010 ، توجد QueryTables في "ListObject" داخل ورقة العمل ، لذلك تحتاج فقط إلى ضبط الكود الخاص بك إلى:

Set oQuery = WorkBooks("Book 1").Sheets("Sheet 1").ListObjects(1).QueryTables(1)

http://msdn.microsoft.com/en-us/library/ff841237.aspx

تيم

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top