با سلام
امکان اینکه رنگ پس زمینه فیلدهای یک فرم که در حالت دیتا شیت هست ،با اعمال شرط تغییر کنند وجود داره؟
با سلام
امکان اینکه رنگ پس زمینه فیلدهای یک فرم که در حالت دیتا شیت هست ،با اعمال شرط تغییر کنند وجود داره؟
سلام
بله امکانش هست ؟
سلام.
از راهنمایتون ممنون دوست عزیز.
به نظرم باید راهش را خودم پیدا کنم دیگه.؟
سلام
نمونه ؟
شما میتونید از format condition استفاده کنید. مثلا اگه فیلدی دارید بنام phone :
Me.phone.FormatConditions.Delete
Me.phone.FormatConditions.Add(acFieldValue, acEqual, 2).BackColor = vbRed
Me.phone.FormatConditions.Add(acFieldHasFocus).For eColor = vbGreen
خط اول کاندیشن های قبلی رو پاک میکنه.
خط دوم میگه اگر فیلد phone برابر 2 بود پس زمینه اون فیلد قرمز میشه.
خط سوم هم نوع دیگه ای از شرط گذاریه و میگه هر موقع فیلد phone فوکوس گرفت رنگ متنش سبز بشه.
میتونید کد بالا رو در رویداد form_load قرار بدید. در تمام حالتهای فرم، حتی دیتاشیت هم جواب میده...
سلام.
کد شما را در رویداد on currentنوشتم ولی Erorr میده.erorr.png
فایل نمونه را ضمیمه کردم
سلام
دوستان راهنمایی کنند ممنون میشم.
سلام
اگه شرط شما اینه که اگر هر دو فیلد elan و sehat برابر true بود پس زمینۀ فیلد shomare قرمز بشه، کدتون اشتباهه. باید از کد زیر استفاده کنید:
Private Sub Form_Load()
Me.shomare.FormatConditions.Delete
Me.shomare.FormatConditions.Add acExpression, , "IIf([elan]=True, IIf([sehat]=True, True, False), False)"
Me.shomare.FormatConditions(0).BackColor = RGB(255, 0, 0)
End Sub
ضمنا نیازی نیست در رویداد form_current قرار بدید. البته قرار بدید هم کار میکنه ولی اصولی ترش اینه که در رویداد form_load قرار بدید. شما وقتی در رویداد form_load یک فرمت شرطی تعریف میکنید خود اکسس موقع آپدیت هر فیلد، شرطها رو چک میکنه. اگر در رویداد form_current قرار بدید به ازای هر کلیک روی یک رکورد، روی تمامی رکوردها کدها اعمال میشه و شما یک تیک و پرش مشاهده میکنید.
در همون form_load قرار بدید بهتره...
سلام
مشکلم حل شد .البته من قصد دارم در صورت تیک نداشتنElan &sehat به رنگ قرمز تبدیل بشه که کد را بصورت زیر اصلاح کردم
Me.shenase.FormatConditions.Add acExpression, , "IIf(Diff([date],Shamsi())>5,IIf([elan]=False,IIf([sehat]=False,True,False),False),False)"
یه مشکل دارم
اینکه همونطور که می بینید من در کدم تفاوت دو تاریخ رادارم که الان درست کار مینکه فقط وقتی بجای عدد5 میخوام از یک تک باکس در فرم عدد را بگیرم عمل نمیکنه.یعنی بصورت زیر نوشتم
Me.shenase.FormatConditions.Add acExpression, , "IIf(Diff([date],Shamsi())>forms!tanzim!text0,IIf([elan]=False,IIf([sehat]=False,True,False),False),False)"
ممنون از راهنمایی های شما
والا عدد 5 رو که احتمالا یادتون رفته بذارید ولی بعنوان مثال میتونید بصورت زیر عمل کنید:
Dim str As String
str = "1394/11/22"
Me.shenase.FormatConditions.Add acExpression, , "IIf(Diff([date],Shamsi())>" & str & ",IIf([elan]=False,IIf([sehat]=False,True,False),False),False)"
ممنون از وقتی که میذارید وعذر خواهی که اطلاعات کم بنده باعث میشه اذیت بشید
ولی سوال بنده این بود میشه برای شرط اختلاف تاریخ از یک تک باکس عدد را بگیریم.بجای strکه شما نوشتید وصل به تک باکس فرم بشه
Diff([date],Shamsi())>forms!tanzim!text0
اینجوری که نوشتم جواب نمیده.؟
آخرین ویرایش به وسیله saeed28541 : جمعه 23 بهمن 1394 در 11:25 صبح
ببینید من اون str رو نوشتم تا شما ازش ایده بگیرید. شما نمیتونید عبارت forms!tanzim!text0 رو مستقیما داخل رشتۀ فرمت بندی استفاده کنید چون ویژوال بیسیک اون رو بصورت یکسری حروف در نظر میگیره نه مسیر دسترسی به یک تکست باکس !
شما میتونید به یکی از دو روش زیر عمل کنید:
Dim str As String
str = forms!tanzim!text0
Me.shenase.FormatConditions.Add acExpression, , "IIf(Diff([date],Shamsi())>" & str & ",IIf([elan]=False,IIf([sehat]=False,True,False),False),False)"
یا اگر میخواید بصورت مسقیم بذارید باید بصورت زیر باشه:
Me.shenase.FormatConditions.Add acExpression, , "IIf(Diff([date],Shamsi())>" & forms!tanzim!text0 & ",IIf([elan]=False,IIf([sehat]=False,True,False),False),False)"
واقعا ممنون از وقتی که صرف میکنید.
هر دو راه را استفاده کردم ولی جواب نداد.
فایل نمونه را میزارم اگر نگاه کنید ممنون میشم.
خواهش میکنم.
ببینید فرم tanzim تا وقتی بسته باشه دسترسی به اشیاء داخلش امکان پذیر نیست. اگر اول فرم tanzim رو باز کنید سپس فرم cell رو، اونوقت میبینید که برنامتون درست کار میکنه.
اینجوری نمیتونید عدد تنظیم کنید. اون عدد 10 از کجا میاد؟ کاربر باید تعیین کنه؟
خیلی ممنون.
بله عدد را تو فرم tanzimکاربر وارد میکنه و فقط زمانی که کاربر فرم را فراخوانی کنه برای تغییرات عدد باز میشه.
نمیدونم چقدر کاری که کردم درسته ولی فرم اصلی را مشترکا به جدول cellو time(جدولی که عدد را در خودش داره)وصل کردم و فیلد s(فیلد عدد) را در فرم اصلی cell وارد کردم که نیازی به باز بودن همیشگی فرم tanzim نباشه.
الان درست کار میکنه.
اگر روشی که بکار بردم اشکال داره ممنون میشم راهنمایی کنید.
باز هم ممنون
اصولی ترین کاری که میتونید بکنید اینه:
1. جدول time شما هیچ وقت نباید بیشتر از یک رکورد داشته باشه بنابراین خصوصیت Allow Additions و Allow Deletions فرم tanzim رو برابر no بذارید تا کاربر فقط بتونه عدد 10 رو تغییر بده و امکان حذف و اضافه کردن رکورد نداشته باشه.
2. شما در نمونه ای که در پست قبل قرار دادید باز هم کدهای فرمت بندی رو در رویداد form_current قرار دادید. در صورتی که در پستهای قبلی خدمتتون عرض کردم که بهتره این کدها رو در رویداد form_load قرار بدید. وقتی در form_current قرار بدید به همون دلیلی که قبلا عرض شد شما شاهد یک پرش و تیک خواهید بود که با بیشتر شدن اطلاعات بیشتر هم خواهد شد. بنابراین باز هم توصیه میکنم کدها رو بصورت زیر استفاده کنید.
3. کدهای زیر رو در رویداد form_load قرار بدید:
Dim days As Integer
days = DFirst("s", "time")
Me.shomare.FormatConditions.Delete
Me.shomare.FormatConditions.Add acExpression, , "IIf(Diff([date],Shamsi())>" & days & ",IIf([elan]=False,IIf([sehat]=False,True,False),False),False)"
Me.shomare.FormatConditions(0).BackColor = RGB(255, 0, 0)
با ابن کد آخرین عددی که کاربر بعنوان تعداد روز در جدول time تعیین کرده مبنای محاسبه قرار میگیره. چه فرم tanzim باز باشه چه نباشه...
ممنون. و تشکر