کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

به اشتراک گذاری اطلاعات کسب شده در اکسس از سایت آفیس و سایت های تخصصی خارجی
کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

به اشتراک گذاری اطلاعات کسب شده در اکسس از سایت آفیس و سایت های تخصصی خارجی

پراپرتی Format و استفاده در رویداد Change کنترل TextBox


کد زیر که از فروم خارجی سال 2008 استخراج شده را تست و کاربردش  در نظرات را قید نمائید ( فقط ورود اعداد در تکست باکس مجاز باشد ... Input Mask را تنظیم نمائید ) 


Private Sub Text1_Change()
Text1 = Format(Text1, "#,###")
Text1.SelStart = Len(Text1.Text)
End Sub



فرمت های مرسوم برای تایپ Number و Currency


که می تواند یک تا چهار Section داشته باشد و با سمی کالن از هم جدا میشوند. هر قسمت شامل فرمت خاص برای نوعی از عدد است.


قسمت اول برای اعداد مثبت

قسمت دوم برای اعداد منفی

قسمت سوم برای مقادیر صفر

قسمت چهارم برای مقادیر Null


استفاده از سنبل های زیر برای هر نوع داده در Custom Formats : 


Space : فضاهای خالی را بعنوان کارکتر واقعی نشان میدهد

"ABC" : نمایش داخل کوتیشن

!                   : چپ چین کردن 

*                  : پر کردن فضای موجود با کاراکتر بعدی

\                  : نمایش کاراکتر بعدی بعنوان کاراکتر واقعی   .شما می توانید همچنین کاراکترهای واقعی را با قراردادن  علائم کوتیشن اطراف آنها مشاهده نمائید.

[ Color ]   : دیتای فرمت شده را رنگی نمایش میدهد ،  رنگ بین براکت باشد!!!  رنگ های موجود 

Black , Blue , Green , Cyan , Red , Magneta , Yellow , White


تابع زیر در رویداد LostFocus تکست باکس Unbound به نام TaxRefund در صورتیکه مقداربعداز خروج از تکست باکس که ذخیره میشود عددی باشد (  با تابع IsNumeric چک می کند ) با فرمت Currency و اگر نباشد با فرمت Capital یا حروف بزرگ نمایش میدهد.( علامت بزرگتر)



Function FormatValue() As Integer 

    Dim varEnteredValue As Variant 

    varEnteredValue = Forms!Survey!TaxRefund.Value 

    If IsNumeric(varEnteredValue) = True Then 

        Forms!Survey!TaxRefund.Format = "Currency" 

    Else 

        Forms!Survey!TaxRefund.Format = ">" 

    End If 

End Function


\   :  مانند محصور کردن کاراکتر با علامت دابل کوتیشن است 

<  : تمام تکست UpperCase میشود ( حروف بزرگ )

> : تمام تکست LowerCase میشود ( حروف کوچک )



Custom Formats برای فیلدهای نوع تکست می تواند تا دو سکشن داشته باشد.هر سکشن حاوی فرمت خاصی برای داده متفاوت در یک فیلد می باشد.( دو سکشن با  سمی کالن از هم جدا میشوند )


سکشن اول برای فیلدهای حاوی تکست

سکشن دوم برای فیلدهایی با رشته های Zero-Length و Null Values ( نمایش تکست مورد نظر در صورتیکه فیلد دارای طول صفر باشد یا Null )



For example, if you have a text boxcontrol in which you want the word "None" to appear when there is no string in the field, you could type the custom format @;"None" as the control's Format propert setting. The @ symbol in the first section causes the text from the field to be displayed and the second section causes the word "None" to appear when there is a zero-length string or Null value in the field.






















Event OnChange For TextBox



The Change event occurs when the contents of the specified control change


زمانی اتفاق می افتد که محتویات کنترل مشخص شده تغییر یابد 


فرضا فرمی دارید و یکسری داده ها را از جدول به کنترل ایجادشده  واکشی کرده اید ( یعنی کنترل ها Bound شده هستند )  و داده ها بصورت Continous در گرید بنمایش گذاشته میشود ( در سکشن Detail ) حال در Form Header تکست باکسی  تعبیه کرده اید با نام text5 که Unbound است  . در کویری بیلدر فرم که میتوانید در RecordSource در پراپرتی شیت در نمای دیزاین بدان دست یابید در قسمت فیلد نام و نام خانوادگی در Criteria نوشته اید "*"  & Forms!Form1!text5  ( تکست ۵ در فرم هدر ساخته شده ) برای اینکه همزمان با تایپ کاراکتر در تکست ۵ منبع فرم ریکوئری شود در رویداد Change آن تکست باکس می نویسید 


Me.Requery 


اگر به همین بسنده کنید بعد از تایپ حرف منبع ریکوئری شده با توجه به شرطی که در کوئری قرار داده شده و فوکس به اولین کنترل در دیتیل انتقال داده می شود . در نتیجه باید فوکس را دوباره به text5 منتقل کنیم در نتیجه 


Me.text5.SetFocus 


چانچه عبارت زیر نوشته نشود حروف تاپ شده در همان Space اول درجا میزند یعنی حرف بعدی جایگزین حرف قبلی میشود و باصطلاح به Space بعدی منتقل نمیشود.


(Me.text5.SelStart=Len(Me.text5.text


توضیح در مورد پراپرتی SelStart


عدد صحیح محدوده 0 تا مجموع کاراکترها  در ناحیه تکست باکس کمبو باکس ( چون کمبو یک تکست باکس دارد و یک دراپ داون کنترل )


برای تنظیم یا برگشت این پراپرتی به یک کنترل ، کنترل باید فوکس داشته باشد . برای انتقال فوکی به یک کنترل متد SetFocud را بکار می برند 


اگر  SetFocus داده نشود اروری دریافت خواهید کرد که نبود آنرا متذکر خواهد شد طبق شکل زیر 


You cannot reference a property or method for a control unless the control has the focus


بخصوص در فیلتر در کمبو باکس اتفاق می افتد 




البته در این مورد چنانچه داده ها در دیتیل فرم باشند و نه در سابفرم زمانیکه تایپ می کنید Space Bar نمی گیرد (  یعنی Space بزنید ) و این مشکل بزرگیست . که معمولا با اضافه کردن KeyCode 32 و قرار دادن یک مقدار Boolean در رویداد Keycode دار و اعمال آن در رویداد Change تکست باکس برطرف میشود که اگر مقدار Boolean درست بود میشود 


 " " & Me.text5=Me.text5


در هر صورت کار درستی نیست و همان بهتر که باتنی در فرم ایجاد شود و فیلتر از طریق آن اعمال گردد و یا داده ها در سابفرم آورده شود و سابفرم در دیتیل فرم کشیده شود که این مشکل زدن Space هم در رویداد Change آن تکست باکس حل شود 



در مورد پراپرتی Text در تکست باکس : 


از این پراپرتی می توان برای تنظیم یا بازگشت مقدار موجود در TextBox استفاده نمود



 در حالیکه کنترل فوکس دارد این پراپرتی محتوی داده تکست جاری در کنترل است .پراپرتی Value محتوی آخرین داده ذخیره شده است . وقتی فوکس به کنترل دیگری منتقل میشود داده ی کنترل آپدیت میشود و پراپرتی Value به این داده جدید اختصاص می یابد. تنظیم پراپرتی Text از دسترس خارج است تا زمانیکه دوباره آن کنترل فوکس بگیرد.اگر از کامند Save Record استفاده شود بدون انتقال فوکس پراپرتی Text و پراپرتی Value همچنان یکسان می مانند.



!  Note

To set or return a control's Text property, the control must have the focus, or an error occurs. To move the focus to a control, you can use the SetFocus method or GoToControl action.


طبق نوت آفیس برای استفاده از پراپرتی Text کنترل باید فوکس داشته باشد یا اینکه ارور اتفاق می افتد برای انتقال فوکس از متد SetFocus یا اکشن GoToControl استفاده میشود .