السلام عليكم ورحمة الله وبركاته
إخواني وأحبابي في الله
كل عام وأنتم بخير والأمة الإسلامية كلها بخير بمناسبة مقدم أحب الشهور إلى قلوبنا جميعاً وهو شهر رمضان ، وبهذه المناسبة أحببت أن أقدم لكم درس تعليمي (ربما تتذكروني في مثل هذه الأيام من كل عام وتدعوا لي بالرحمة والمغفرة وما أحوجنا إليها)
درس اليوم سيكون في مجال لم يتطرق إليه الكثيرون بالشرح ولا حتى بالمحاولات وهو جلب البيانات عن طريق الأكواد من المواقع المختلفة .. أتت لي الفكرة بينما كنت أبحث عن إمساكية شهر رمضان لهذا العام ووجدت في الموقع الذي توصلت إليه أن الصفحات عبارة عن جدول ، فأحببت أن أقدم لكم هذا الدرس.
يبدأ الكود بالإعلان عن بعض المتغيرات التي سنستخدمها في الكود ، وقبل الإعلان عن المتغيرات سيتعين علينا إضافة بعض المكتبات المرتبطة بهذه المتغيرات
CODE
http As MSXML2.XMLHTTP60<br />
هذا المتغير يستخدم في التعامل مع صفحات الويب وسنقوم بإضافة المكتبة Microsoft XTML, v6.0 من خلال القائمة Tools ثم References
CODE
html As MSHTML.HTMLDocument<br />
هذا المتغير لتخزين صفحة الـ HTML للصفحة التي سنقوم بزيارتها لبدء التعامل معها في الكود ، والمكتبة المرتبطة بها Microsoft HTML Object Library
أول سطر بالكود سيكون من النوع الثابت وهو عنوان الصفحة المراد التعامل معها ، وهنا العنوان يخص مصر ومدينة الإسكندرية .. بإمكانكم الذهاب للموقع واختيار الدولة ثم اختيار المدينة التي ترغبون بالحصول على الإمساكية منها ، ووضع عنوان الصفحة في الكود في أول سطر
CODE
Const sURL As String = "https://www.prayer-times.info/emsakia/2020/egypt/alexandria/"
هذا الجزء من الكود يخصص ويعين قيم للمتغيرات التي وضحناها ثم يقوم بفتح الصفحة وتخزين صفحة الـ HTML بحيث يحتوي على ResponseText أي القيمة التي نحصل عليها كاستجابة من الموقع بعد محاولة فتحه ، وفي النهاية يتم تخزين هذه الاستجابة والتي هي عبارة عن صفحة HTML في متغير باسم html لنتمكن من التعامل معه بعد ذلك في الكود.
CODE
Set http = New MSXML2.XMLHTTP60
Set html = New MSHTML.HTMLDocument
With http
.Open "Get", sURL, False
.send
html.body.innerHTML = .responseText
End With
السطر التالي يقوم بتخزين الجدول الموجود في صفحة الـ HTML في متغير باسم tbl ، وهو الجدول رقم 1 (الصفر في الفهرس يعني أول جدول ..)
CODE
Set tbl = html.getElementsByTagName("Table")(0)
الجزء الأخير من الكود يبدأ بمعالجة الجدول حيث يتم عمل حلقات تكرارية لصفوف الجدول ، وداخل الحلقة التكرارية للصفوف حلقة تكرارية للأعمدة ، ثم تخزين البيانات ووضعها في ورقة العمل
CODE
Application.ScreenUpdating = False
For Each rw In tbl.Rows
r = r + 1: c = 1
For Each cl In rw.Cells
Sheets(1).Cells(r, c).Value = cl.innerText
c = c + 1
Next cl
Next rw
Range("A1").CurrentRegion.Borders.Value = 1
Application.ScreenUpdating = True
أرجو أن يكون الدرس مفيد لكم ، ولا تنسونا بصالح دعائكم
رابط الملف المرفق من هنا
أخوكم في الله / ياسر خليل أبو البراء