نویسنده موضوع: سوال در خصوص محدود کردن فرمت ورودی Textbox  (دفعات بازدید: 3358 بار)

cadkhoda

  • کاربر فعال
  • ***
  • ارسال: 133
  • جمع امتیازها: +3/-0
درود
فرمی طراحی شده که در یکی از تکست باکس ها، تاریخ درج می شود.
قصد دارم فرمت ورودی تکست باکس را محدود کنم یعنی تاریخ فقط به صورت 1394/01/26 درج شود و امکان درج 1394-01-26 یا 13940126 و ... و حتی متن وجود نداشته باشد.
برای محدود کردن فرمت تکست باکس به صورت ...../...../........ و عدم امکان درج فرمتی دیگر مثلا متن و ... چه راهکاری وجود دارد؟
تلميذ بی ارادت ، عاشق بی زر است و رونده بی معرفت ، مرغ بی پر و عالم بی عمل ، درخت بی بر است و زاهد بی علم ، خانه بی در .

lamp

دانلود فهرست + فصل اول کتاب توابع و فرمول نویسی اکسل

خبر: کامل ترین کتاب توابع و فرمول نویسی در اکسل ترجمه تیم فرساران


s.sarhadi

  • کاربر فعال
  • ***
  • ارسال: 224
  • جمع امتیازها: +23/-3
برای اینکه فرمت تاریخ اون طور که شما می خواهید باشه اول باید یوزر رو مجبور کنید که فقط عدد وارد کنه. حتما میدونید که هر کلید روی کیبرد کدی داره که به Ascii معروفه. باید عملکرد هر کلیدی که کد Ascii اون مربوط به اعداد نیست، رو غیر فعال کنید. کد Acsii کلید ها رو میتونید از اینترنت به راحتی پیدا کنید. فعلا در همین حد که کد کلیدهای اعداد از 48 تا 57 هستند. بنابراین باید بگیم که هنگام فشرده شدن کلیدهای کیبورد (KeyPress) برنامه چک کنه که کد Ascii مربوط به کلید فشرده شده در بازه 48 تا 57 هست یا نه. اگر بود یعنی کلید فشرده شده عددی بوده. بنابراین باید همون کد Ascii رو قبول کنه ولی اگر کد Ascii در اون بازه نبود، یعنی کلید عددی نبوده. بنابراین باید متغیر KeyAscii که برابر با کد Ascii کلید فشرده شده هست رو صفر کنیم یعنی تصور کنیم که هیچ کلیدی فشرده نشده. با توجه به توضیحات کد رو باید اینطور بنویسید:

Private Sub TextBox5_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If (KeyAscii > 47 And KeyAscii < 58) Then
        KeyAscii = KeyAscii
    Else
        KeyAscii = 0
    End If
end sub
تا اینجا کاربر فقط میتونه عدد وارد کنه حالا اگر می خواهید که فرمت تاریخ رو تعریف کنید از کد زیر میتونید بهره ببرید
Private Sub TextBox5_Change()
    If Len(TextBox5.Value) = 8 Then TextBox5.Value = Format(TextBox5.Value, "####/##/##")
End Sub
در این صورت یوزر فقط تایپ میکنه 13940125 , اونوقت به صورت اتوماتیک تاریخ به فرمت 1394/01/25 تبدیل میشه
باید توجه کنید که یوزر نباید بتونه بیشتر از 8 کارکتر وارد کنه بنابراین پراپرتی MaxLength رو برای تکستباکستون 10 قرار بدید( دو کارکتر برای /)

حالا اگر یوزر کمتر از 8 کارکتر وارد کنه کد عمل نمیکنه بنابراین می تونید در رخداد خروج از تکستباکس این کد رو بنویسید:
if len(textbox5.text)<10 then
      msgbox "تاریخ اشتباه است"
      cancel=true
end if

تا اینجا تاحدودی مشکل حل میشه ولی تصور کنید که یوزر عدد 13951580 رو وارد کنه با اینکه این تاریخ اشتباهه ولی برنامه هیچ ایرادی نمیگیره!!!! برای اینکه یوزر رو مجبور کنید که تاریخ صحیح وارد کنه باید یک ماژول بنویسید تا درستی تاریخ رو چک کنه و هنگام خروج از تکستباکس اون ماژول رو صدا کنید. این کار رو به خودتون میسپارم. سعی کنید در ذهنتون بیان کنید که تاریخ صحیح باید چه ویژگی هایی داشته باشه. و دقیقا اونچه میگید رو به صورت یک الگوریتم در بیارید. اگر مشکلی داشتید حتما راهنماییتون میکنم ولی از من نخواهید که کد رو بهتون بدم. چون من فکر میکنم شما ذهنتون توان برنامه نویسی داره بنابراین حیفه که توانتون رو تقویت نکنید.

پیروز و سربلند باشید

cadkhoda

  • کاربر فعال
  • ***
  • ارسال: 133
  • جمع امتیازها: +3/-0
درود بر شما
دست شما درد نکنه
دست مریزاد
شرمنده کردید
با چه زبانی باید از شما و دوستانی مثل آقای میر و سایر عزیزان که وقت میزارن و با حوصله جواب سوال ها رو میدن تشکر کرد.
تلميذ بی ارادت ، عاشق بی زر است و رونده بی معرفت ، مرغ بی پر و عالم بی عمل ، درخت بی بر است و زاهد بی علم ، خانه بی در .

کیخا

  • کاربر فعال
  • ***
  • ارسال: 193
  • جمع امتیازها: +25/-6
  • پرسیدن عیب نیست ندانستن عیب است
با سلام من یک پیشنهاد دارم و آن اینکه چه اشکال داشت روی تکست باکس کلید کرده و کد زیر را می نوشتیم
TextBox5.NumberFormat = "yyyy/m/d;@"و یا ضمن تعریف یک متغییر و سپس استفاده از کد فوق
Yahoo

s.sarhadi

  • کاربر فعال
  • ***
  • ارسال: 224
  • جمع امتیازها: +23/-3
درود. دوست عزیز من این کد رو تست کردم ولی جواب نمیده. میگه همچین متدی وجود نداره. اگر قبلا تست کردید و جواب گرفتید لطفا بیشتر راهنمایی کنید.

با سپاس

lamp

دانلود فهرست + فصل اول کتاب توابع و فرمول نویسی اکسل

خبر: کامل ترین کتاب توابع و فرمول نویسی در اکسل ترجمه تیم فرساران


کیخا

  • کاربر فعال
  • ***
  • ارسال: 193
  • جمع امتیازها: +25/-6
  • پرسیدن عیب نیست ندانستن عیب است
باسلام مجدد،در ذیل بخشی از کدهای مربوط به رویه های حودم را خدمتت تقدیم می کنم آنان را در یک شیت امتحان کن و بطور حتم فرمت تاریخ کوتاه ویا بلندو ترکیبی  مندرج درستون، همان قالب دلخواه می باشد بنابراین اگر در صفحه گسترده نتیجه می دهدپس در یک قالب تکست باکس قابلیت تعریف وتنظیم راخواهد داشتSub Format_Date()
Range("c3", Range("c2").End(xlDown)).NumberFormat = "yyyy/m/d;@"
Sub FormatMano()
   
    Range("c3", Range("c2").End(xlDown)).NumberFormat = "ddd mmm yyyy"
End Sub
Sub Date_Format()
With Range("C3", Range("C2").End(xlDown))
        .Interior.Color = rgbAquamarine
        .Font.Color = rgbRed
        .Font.Size = 12
        .NumberFormat = "dddd dd mmm yyyy"
       
    End With
End sub
کاش یک نمونه تکس باکست ارایه می دادید تا همسان سازی کدینگ انجام می گرفت
Yahoo

کیخا

  • کاربر فعال
  • ***
  • ارسال: 193
  • جمع امتیازها: +25/-6
  • پرسیدن عیب نیست ندانستن عیب است
با عرض پوزش به دلیل فراموشی   نمونه ای از کدهای مزبور تقدیم می شود
Yahoo