قم بتغيير تنسيق التاريخ بعد تحميله في مربع نص UserForm
سؤال
لدي نموذج مستخدم مع مربع نص.عند تهيئة مربع النص، يتم ملؤه بالتاريخ الفعلي.ما أريد فعله هو ملئه بتنسيق تاريخ مخصص = DD-MM-YYYY
لقد كتبت الكود أدناه وكان هناك خطأ ما ولكن ليس لدي أي فكرة عما هو الخطأ.يحتوي الرمز على msgbox قبل إدراج القيمة، MsgBox
يظهر التاريخ بتنسيق مخصص ولكن عندما يتم تمريره إلى textbox.value
انها مثل M/DD/YYY
.
Dim year As Long, year_control As Date
year = Format(Date, "yyyy")
year_control = Format(Date, "dd-mm-yyyy")
MsgBox (year_control)
textbox.Value = year_control
(...)
If year_control < "01-04-" & year Then
Me.Controls("rok1").Value = True
Else
Me.Controls("rok2").Value = True
End If
المحلول
لا يمكنك "تنسيق" متغير التاريخ:
year_control As Date
year_control = Format(Date, "dd-mm-yyyy")
الكود أعلاه لا يفعل شيئًا لأن متغير التاريخ يقوم ببساطة بإخفاء تاريخ، وبشكل أكثر تحديدًا، يقوم VBA بتخزين متغيرات التاريخ كأرقام الفاصلة العائمة IEEE 64 بت (8 بايت) التي تمثل تواريخ تتراوح من 1 يناير 100 إلى 31 ديسمبر 9999 وأوقات من 0 :00:00 إلى 23:59:59.
بغض النظر عما تفعله بهذا المتغير، فإنه سيعرض دائمًا التواريخ وفقًا لتنسيق التاريخ القصير الذي يتعرف عليه جهاز الكمبيوتر الخاص بك.يتم عرض الأوقات وفقًا لتنسيق الوقت (إما 12 ساعة أو 24 ساعة) الذي يتعرف عليه جهاز الكمبيوتر الخاص بك.
لذلك بينما يمكنك تغيير القيمة الداخلية التي يحتفظ بها Date
متغير لا يمكنك تخزين تنسيقه داخل نفس المتغير.
ومع ذلك، يمكنك عرضه بالطريقة التي تريدها داخل متغير السلسلة.لذا، إذا استخدمت:
Dim year As Long, year_control As Date
Dim strYear_control As string
year = Format(Date, "yyyy")
year_control = Format(Date, "dd-mm-yyyy")
strYear_control = Format(year_control , "dd-mm-yyyy")
MsgBox (strYear_control)
textbox.Value = strYear_control
ينبغي أن تعمل كما كنت تتوقع.كما Format()
ستُرجع الدالة متغيرًا (سلسلة) يحتوي على تعبير منسق وفقًا للتعليمات الموجودة في تعبير التنسيق.
كملاحظة جانبية قد ترغب أيضًا في استخدامها
Format$(year_control , "dd-mm-yyyy")
لأنه سيكون أسرع بكثير، ويمكنك أيضًا استخدامه FormatDateTime
لتنسيق تاريخك بطرق مختلفة أخرى.