مایکل یک ماکرو دارد که تعدادی کاربرگ را چاپ می کند. گاهی اوقات ممکن است یک یا دو کاربرگ که قرار است چاپ شود حاوی داده ای نباشد. او به دنبال تکنیکی است که آزمایش کند آیا یک کاربرگ حاوی داده است یا خیر، و سپس فقط آن کاربرگ ها را چاپ کند.
راه های مختلفی وجود دارد که می توانید برای آزمایش یک کاربرگ خالی استفاده کنید. البته بستگی به این دارد که منظور شما از «خالی» حداقل تا حدی واقعاً چیست. به عنوان مثال، اگر یک کاربرگ مطلقاً هیچ چیزی در خود نداشته باشد - چیزی در هیچ سلولی از کاربرگ وجود ندارد - میتوانیم آن را خالی در نظر بگیریم. با این حال، ممکن است یک کاربرگ داشته باشید که حاوی عناوین ستونهایی باشد که اضافه کردهاید، اما هیچ چیز به جز آن سرفصلها وجود ندارد. در حالی که اکسل کاربرگ را خالی در نظر نمی گیرد، ممکن است آن را برای مقاصد چاپی خالی در نظر بگیرید.
شاید ساده ترین راه برای بررسی خالی بودن یک کاربرگ استفاده از شی UsedRange برای تعیین آنچه در کاربرگ وجود دارد باشد:
With ActiveSheet.UsedRange
IsSheetEmpty = .Rows.Count = 1 And _
.Columns.Count = 1 And _
.Cells(1,1) = ""
End With
توجه داشته باشید که شی UsedRange از محدوده سلول های استفاده شده در یک کاربرگ تشکیل شده است. بنابراین، اگر تعداد ردیفهای این محدوده 1 و تعداد ستونها در این محدوده 1 باشد و در سلول اول شی UsedRange چیزی وجود نداشته باشد، احتمالاً کاربرگ خالی است.
بسته به ویژگی های داده های خود، ممکن است بتوانید کد را حتی بیشتر کوتاه کنید:
With ActiveSheet.UsedRange
IsSheetEmpty = .Count = 1 And .Cells(1,1) = ""
End With
در این نسخه شما به سادگی بررسی می کنید که آیا تعداد سلول ها در شی UsedRange 1 است و آیا آن سلول خاص خالی است.
اگر یک ردیف سرصفحه (یا دو) در کاربرگ خود دارید، میتوانید این تکنیک را به هر تعداد ردیف و ستونی که در آن سرصفحهها دارید، تنظیم کنید. به عنوان مثال، اگر هدرهایی در محدوده A1:F4 دارید، ممکن است تکنیک را به این صورت تنظیم کنید:
IsSheetEmpty = ActiveSheet.UsedRange.Rows.Count=4 _
AND ActiveSheet.UsedRange.Columns.Count=6
در این نمونه نیازی به بررسی محتویات A1 نیست زیرا از قبل میدانید که آن (و چندین سلول دیگر) حاوی اطلاعاتی هستند - هدرهای شما. شما فقط می خواهید همه چیز را در آن هدرها نادیده بگیرید تا مشخص شود که آیا اطلاعات اضافی در کاربرگ وجود دارد یا خیر.
اگر کاربرگ کاملاً خالی است (هیچ اطلاعات سرصفحهای که اضافه کردهاید وجود ندارد)، میتوانید از تابع کاربرگ CountA برای تجزیه و تحلیل سلولهای کاربرگ استفاده کنید. اگر نتیجه تابع بزرگتر از صفر باشد، کاربرگ خالی نیست. به عنوان مثال، اجازه دهید بگوییم که کاربرگ مورد نظر برای تجزیه و تحلیل توسط شی sht مشخص شده است. می توانید از این تکنیک به این صورت استفاده کنید:
IsSheetEmpty = Application.WorksheetFunction.CountA(sht.Cells) = 0
البته این امکان وجود دارد که یک کاربرگ حاوی مواردی غیر از اطلاعات در سلول ها باشد. اگر مشکوک هستید که این نوع اشیاء را در یک کاربرگ دارید (چیزهایی مانند AutoShapes، گرافیک، یا نمودارهای جاسازی شده)، پس آزمایش شما برای "تهی بودن" باید کاملتر باشد. هر یک از این موارد در مجموعههایی قرار دارند که در VBA قابل دسترسی هستند، و میتوانید ویژگی Count را برای هر مجموعه بررسی کنید تا ببینید صفر است یا خیر.