تابع Dcount و کاربرد آن در برنامه نویسی VBA در اکسس
امروز می خواهیم در خصوص تابع Dcount در محیط برنامه نویسی VBA در نرم افزار اکسس با هم صحبت کنیم .
اینکه این تابع چیست و چه کاربردی می تواند برای ما داشته باشد .
از طرفی بررسی خواهیم کرد که این تابع از چه قسمتهایی تشکیل شده و هر کدام از آنها چه کاری انجام می دهد .
و در نهایت اینکه با استفاده از مثال هایی کاملا عملی و کاربردی با نحوه استفاده از این تابع در محیط برنامه نویسی VBA آشنا می شویم .
بنابراین برای اینکه با این تابع بخوبی آشنا شده و با نحوه کاربرد ان در محیط اکسس آشنا شوید تا انتهای این اموزش همراه من باشید . پیش از این بررسی کردیم : آ.
۱- معرفی عملکرد تابع Dcount
در قدم اول بیایید اصلا با هم بررسی کنیم و ببینیم که این تابع چه کاری می تواند برای ما داشته باشد .
این تابع امکانی را برای فراهم می آورد که با استفاده از آن می توانیم مقادیر مورد نظر خود را در یک جدول مورد شمارش قرار دهیم .
اجازه بدهید از همین ابتدای کار مساله را با ذکر یک مثال کاربردی بررسی کنیم .
به تصویر زیر نگاهی بیندازید .
ما در اینجا یک فرم داریم که اطلاعات مربوط به جدولی به نام “tbl-books” را نمایش می دهد .
اگر که دقت کنید در قسمت پایین و سمت راست این فرم یک کادر وجود دارد که در داخل آن عدد ۱۵ درج شده است .
همانطور که از توضیحات بالای این کادر می توان متوجه شد این عدد نشاندهنده تعداد کتابهایی است که ما تا کنون در جدول خود ثبت کرده ایم .
این عدد از کجا آمده است .
مشخص است از جدولی که فرم ما به آن وصل است و اطلاعات کتابها را در آن ذخیره می کند .
یعنی وقتی که ما مشخصات کتابی را در این فرم وارد می کنیم به محض زدن دکمه ” ذخیره کن ” اطلاعات این کتاب در جدول مربوط به اطلاعات کتابها ذخیره می شود و همزمان هم تعداد کتابهای ذخیره شده شمارش شده و بصورت یک عدد در کادری که مشاده می کنید برای ما به نمایش در می آید .
یعنی قرار است این کار بدون دخالت ما و بطور کاملا خودکار انجام شود .
اما چگونه ؟
خیلی ساده با استفاده از تابع ِ D count .
البته این تنها یک مثال بود که متوجه شویم این تابع چه کاری می تواند انجام دهد .
پس بخاطر بسپارید که کار این تابع شمارش مقادیری است که ما برایش تعیین میکنیم .
حالا بیایید با خود این تابع و قسمتهای مختلف ان آشنا شویم تا بعد باز هم با استفاده از مثال های بیشتر بطور کامل با نحوه کاربرد این تابع در محیط برنامه نویسی VBA آشنا شویم.
پیش از این بررسی کردیم : آشنایی کامل با توابع نوع Domain در اکسس.
۲- معرفی پارامترهای تابع D Count
برای اینکه با شکل کلی تابع Dcount بطور کامل آشنا شوید به تصویر زیر خوب دقت کنید .
فکر می کنم تمام آن چیزی را که باید در خصوص این تابع بدانیم را در این تصویر می توانید مشاهده کنید .
اما باز هم بیایید کمی بیشتر آرگومان های آن را بررسی کنیم .
اولین آرگومان که به نام expr است همان آیتم مورد نظر است که ما می خواهیم آن را شمارش کنیم .
وجود این آرگومان برای کارکرد تابع الزامی است .
آرگومان یا پارامتر بعدی به نام domain است .
این پارامتر تعیین می کند که آیتم مورد نظر ما برای شمارش در کجا قرار دارد . در یک جدول یا یک کوئری ؟
در هر حال نام آن جدول یا کوئری را در اینجا وارد می کنیم .
وجود این پارامتر هم برای کارکرد تابع الزامی است .
قسمت سوم هم که criteria یا شرط تابع است و می تواند بنا بر نیاز ما حالت های مختلفی داشته باشد .
اما این پارامتر و وجود آن برای کارکرد این تابع الزامی نخواهد بود .
۳- بررسی مثال های کاربردی در کار با تابع Dcount
در اینجا با هم به بررسی حالت های مختلف از نحوه استفاده از این تابع می پردازیم .
حالت اول :
در این حالت می خواهیم کل کتاب هایی که تا به حال در جدول مربوط به ثبت کتابها ذخیره کرده ایم را بشماریم .
نام جدول حاوی نام کتابهای ما “tblbooks” است
خوب برای این کار از فرمول زیر استفاده می کنیم .
("DCount("book_cod","tbl_books
در اینجا ما فیلد مربوط به کد کتابها را از جدول “tblbooks” مورد شمارش قرار می دهیم .
در همین جا یک نکته را به شما بگویم و آن هم اینکه حتما آرگومانهای شما باید در داخل دو دابل کوتیشن قرار بگیرند . در غیر اینصورت ممکن است تابع شما با خطا مواجه شود .
مطمئنا برخی از افراد تازه کار از خود می پرسند که این تابع را در کجا باید بنویسم ؟
چه جوری مقادیری که توسط این تابع استخراج می شود را استفاده کنم ؟
برای پاسخ به این پرسش ها من فرم زیر را طراحی و ایجاد کرده ام .
این فرم حاوی چند تکس باکس است .
من می خواهم اطلاعات هر تکس باکس بر اساس عنوانی که برای آنها مشخص کرده ام از جدول مربوطه استخراج و در این تکس باکس ها قرار بگیرد .
خوب برای این کار ابتدا وارد محیط برنامه نویسی VBA می شوم .
شی فرم را انتخاب و در رویداد on Load آن کد زیر را وارد می کنم .
("Me.Text2 = DCount("bookcode", "tblbooks=
حالا وقتی که من فرم خود را اجرا می کنم مشاهده می کنید در تکس باکس مربوط به تعداد کل کتابها عدد ۱۵ درج شده که این یعنی تا به حال ۱۵ کتاب در این جدول ثبت شده است .
این ساده ترین حالتی که می توانیم از این تابع استفاده کنیم .
اما اگر بخواهیم از این تابع در حالت های پیشرفته تری استفاده کنیم باید به سراغ استفاده از شرط ها در ساختار این تابع برویم .
در اینجا با هم حالت ها و شرط های مختلف را بررسی می کنیم .
فرض کنید که می خواهیم بدانیم چه تعداد کتاب داریم که در مهرماه چاپ شده اند .
خوب برای این کار از کد زیر استفاده می کنیم .
("'مهر'=Me.Text2 = DCount("bookcode", "tblbooks", "dprint
ما در این کد از برنامه خواسته ایم که :
” بشمار تعداد شماره کتابهایی را که تاریخ چاپ آنها در مهر بوده است ” .
در این کد یک نکته مهم هم وجود دارد .
این نکته این است که وقتی ما می خواهیم در ساختار شرط خود از یک عبارت متنی استفاده کنیم حتما باید آن متن را در داخل دو سینگل کوت ( ‘ ‘ ) قرار دهیم .
حالا شرط دیگری را با هم بررسی می کنیم .
این بار فرض کنید می خواهیم بدانیم چه تعداد کتاب داریم که قیمت آنها بالای ۵۰۰۰ تومان است .
خوب به زبان محاوره می خواهیم به برنامه بگوییم که :
” تعداد کتابهایی را که قیمت آنها بالاتر از ۵۰ هزار تومان است را برای ما بشمار “
خوب همین جمله را به زبان کد و بصورت زیر در اختیار برنامه قرار می دهیم .
("Me.Text4 = DCount("bookcode", "tblbooks", "price > 50000
در اینجا اگر دقت کنید متوجه می شوید که اگر در ساختار شرط ما از اعداد استفاده کنیم نیازی به این نداریم که آنها را همانند حالت قبل در داخل تک کوتیشن قرار دهیم .
حالت سومی هم در کار با شرط ها وجود دارد . آن هم این است که فرض کنید بخواهیم کتابها را بر اساس تاریخ فروش آنها شمارش کنیم .
به زبان ساده باید از برنامه بخواهیم که :
” کتابهایی را شمارش کن که تاریخ فروش آنها را برایت مشخص می کنم” .
در این حالت عبارت شرط ما بصورت زیر در خواهد آمد
("Me.Text6 = DCount("bookcode", "tblbooks", "sdated =#01/23/2020#
همانطور که مشاهده می کنید وقتی عبارت شرط ما به حالت تاریخ باشد باید حتما تاریخ مورد نظر را در داخل دو علامت # # قرار دهیم
یک مطلب خواندنی : به کمک مثال های کاربردی تابع DLOOKUP در اکسس را یاد بگیرید
پس به عنوان یک قانون کلی در این تابع و البته دیگر توابع هم خانواده Domain Function که قبلا راجع به آنها صحبت کرده بودیم این سه مورد را مدنظر قرار دهید :
۱- اگر شرط ما دارای عدد بود نیاز به استفاده از هیچ کاراکتر اضافه ای نداریم .
۲- اگر شرط ما دارای متن بود باید حتما متن را در داخل دو سینگل کوت قرار دهیم .
۳ – اگر شرط ما دارای تاریخ بود باید تاریخ مذکور را در داخل دو علامت # # قرار دهید .
خوب ما تا به اینجای کار حالت های مختلف تابع Dcount را مورد بررسی قرار دادیم .
اما اینجا یک اشکال دیگر هم پیش می آید .
تمام حالت هایی که ما در بالا بررسی کردیم حالاتی بود که خود ما شرط های مربوط به آنها را تعیین می کردیم .
یعنی ما تعیین کردیم که متابهایی که در مهر ماه چاپ شده اند شمرده شوند .
اما اگر کاربر بخواهد کتابهایی را که مثلا در آبان ماه چاپ شده اند بشمرد چه باید بکند ؟
یا تعداد کتابهایی را که کمتر از ۵۰ هزار تومان قیمت دارند را بشمرد چه باید بکند ؟
مطمئنا قرار نیست که کدهای خود را در اختیار کاربر قرار دهیم .
اما اگر ما بخواهیم که عبارت های شرط را بر مبنای انتخاب کاربر مقدار دهی کنیم چه باید بکنیم ؟
چاره کار چیست ؟
با من همراه باشید تا در این خصوص بیشتر با هم صحبت کنیم و به پاسخ همه این پرسش ها بپردازیم .
استفاده از تابع DCount بر مبنای شرط تعیین شده از سوی کاربر .
برای اینکه بتوانیم کار شمارش اطلاعات را بر مبنای شرط هایی که کاربر تعیین می کند انجام دهیم بهترین کار این است که یک تکس باکس را در اختیار کاربر قرار دهیم تا کاربر با وارد کردن شرط های مورد نظر خود در آن تکس باکس برنامه ما با در نظر گرفتن این شرط ها کار شمارش اطلاعات را انجام دهد .
حالا فرض ککنید که من یک تکس باکس بر روی فرم خودم قرار داده و نام آن را هم txt criteria گذاشته ام .
حالا از کاربر می خواهم تعیین کند که مبنای شرط مورد نظر خود را در این تکس باکس وارد کرده تا این تابع بر مبنای این شرط کار خود را شروع کند .
حال اگر این کاربر در تکس باکس متن “آبان ” را وارد کند یعنی می خواهید عنوان های چاپ شده در این ماه را شمارش کند .
حالا ما باید در ساختار فرمول خود یک تغییر بدهیم .
یعنی اینطوری :
("'"&Me.Text2 = DCount("bookcode", "tblbooks", "dprint='" & Me.txtcriteria1
یا برای شمارش کتابها بر اساس شرطی که کاربر برای قیمت آنها تعیین می کند اگر یک تکس باکس دیگر به نام txtcriteria2 داشته باشیم کد ما به حالت زیر در می آید .
(Text4 = DCount("bookcode", "tblbooks", "price >" & me.txtcriteria2
و در حالتی که کاربر ی تاریخ را در تکس باکس دیگری وارد کند کد ما به صورت زیر خواهد بود .
("#"& Text6 = DCount("bookcode", "tblbooks", "sdated =#" & Me.txtcriteria20
پس می بینید که در هر حالت ساختار کد ما تغییراتی می کند .
حتما به این ساختارها و نحوه نوشتار یا سینستکس آنها توجه کنید که دچار خطا نشوید .
اما در اینجا باز هم یک اشکال دیگر وجود دارد .
آن هم اینکه ما برای دریافت شرطها از کاربر سه تکس باکس در اختیار وی قرار دادیم .
اما راه حلی وجود دارد که می توانیم با استفاده از آن به جای سه تکس باکس یک تکس باکس قرار دهیم و در عوض کار هر سه تا را برای ما انجام دهد .
برای این روش ویدئویی آموزشی تهیه شده است که در قالب یک آموزش یک دقیقه ای تهیه و در پیج اینستاگرام مربوط به سایت قرار گرفته است .
برای مشاهده این کلیپ و نحوه انجام کار می توانید از طریق تصویر زیر اقدام کنید ..
مطالب زیر را حتما مطالعه کنید
ساخت برچسب در اکسس💥چطور آنها را ایجاد و مدیریت کنیم ؟
ریبون ها در اکسس💥از مخفی کردن تا مدیریت کردن آنها
چطوری متن ها و تصاویر را بصورت متحرک در اکسس نمایش بدهیم ؟
فرمت دهی نوشته ها در اکسس | کاربرد + مثالها
۵ ویژگی در فرم های اکسس که کمتر از آنها خبر داشتید .
باز کردن گزارش اکسس برای یک رکورد مشخص + نمونه فایل
1 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
با سلام. ضمن تشکر بابت این آموزش . ممنون میشم پاسخم را از پیج شما دریافت کنم… و اینکه از dcount باید استفاده کنم؟
سوالم این هست
چطور میتونم مثلا کالایی که در تاریخی یکبار به تعداد ۲۰ کارتن آمده و بار دیگر به تعداد ۵۰ کارتن آمد(مثلا از دو جای مختلف یا از یک مبدا با کامیونهای جداگانه) ورود بزنم و موقعی که سند فروش میزنیم، در گزارشها بتونیم مجموع مثلا ۴ تا سند اول فروشمان را ببینیم و تاریخ آخرین فروشمان که مجموع ۲۰ کارتن شد رو به ما برگردونه تا دوباره به همین طریق برای کالای ۵۰ کارتنی همین روال را تکرار کنیم و آخرین فروش که ۵۰ کارتن شد رو تاریخش رو برگردونیم.