كيف يمكنك تحديد التوقيت الصيفي في VBA؟
-
02-07-2019 - |
سؤال
ما هي الوظيفة التي ستسمح لنا بمعرفة ما إذا كان التاريخ في VBA موجودًا بالتوقيت الصيفي أم لا؟
المحلول
بالنسبة للتواريخ غير الحالية (DST 2007+):
أولاً، تحتاج إلى وظيفة للعثور على عدد أيام الأسبوع المحددة في الشهر:
Public Function NDow(Y As Integer, M As Integer, _
N As Integer, DOW As Integer) As Date
' Returns Date of Nth Day of the Week in Month
NDow = DateSerial(Y, M, (8 - Weekday(DateSerial(Y, M, 1), _
(DOW + 1) Mod 8)) + ((N - 1) * 7))
End Function
بعد ذلك، يمكنك التحقق من يوم التوقيت الصيفي مقابل استدعاءات الوظائف التالية:
يسقط:NDow(السنة(تاريخ جديد)، 11، 1، 1)
ربيع:NDow(السنة(تاريخ جديد)، 3، 2، 1)
بالنسبة للتاريخ الحالي:
استدعاء وظيفة Windows API GetTimeZoneInformation ، وسوف يعيد التعداد (عدد صحيح) مع الحالة.
لقد حصلت على الكود الخاص بهذا من موقع Excel الرائع الخاص بـ Chip Pearson.
نصائح أخرى
لأي شخص يتساءل عن كيفية حساب التوقيت الصيفي في أوروبا (توقيت وسط أوروبا)، قمت بتعديل البرنامج النصي من تشيب بيرسون.الأحد الأخير من شهر مارس (من 2 صباحًا إلى 3 صباحًا) وأكتوبر (من 3 صباحًا إلى 2 صباحًا) هما الأيام التي يحدث فيها تبديل الساعة.
الكود التالي هو حدث النقر على زر في Excel:
Dim dates As String
dates = "A1:A20"
For Each c In Worksheets("Sheet1").Range(dates).Cells
If (IsDateWithinDST(c.Value)) Then
c.Value = DateAdd("h", 1, c.Value)
End If
Next
يجب العثور على الوحدة التي تحتوي على الطرق الضرورية هنا.