اگر در حال نوشتن ماکروهایی هستید که کاربرگ های مختلف را در یک ورک بوک پردازش می کنند، ممکن است قبل از انجام هر پردازشی نیاز داشته باشید که بفهمید چه نوع کاربرگ هایی در ورک بوک وجود دارد. این می تواند به ویژه بسیار مهم باشد زیرا برخی از دستورات VBA فقط روی انواع خاصی از کاربرگ ها کار می کنند.
قبل از اینکه بتوانید بفهمید چه نوع کاربرگ هایی در یک ورک بوک وجود دارد، مفید است بدانید که چگونه اکسل برخی از اشیاء تشکیل دهنده ورک بوک را به صورت داخلی ذخیره می کند. اکسل هم مجموعه کاربرگ ها و هم مجموعه نمودارها را نگهداری می کند. مجموعه Worksheets از اشیاء کاربرگ و مجموعه نمودارها از اشیاء ورق نمودار تشکیل شده است. اشیاء ورق نمودار آن دسته از نمودارهایی هستند که یک کاربرگ کامل را اشغال می کنند. شامل مواردی نمی شود که در یک کاربرگ جاسازی شده اند.
به اندازه کافی جالب توجه است که شیت های کاربرگ و برگه نمودار نیز اعضای مجموعه Sheets هستند. بنابراین، اگر می خواهید یک ورک بوک را به ترتیبی که برگه ها ایجاد می کنند پردازش کنید، ساده ترین کار را با قدم گذاشتن در مجموعه Sheets انجام دهید. هنگامی که این کار را انجام می دهید، می توانید ویژگی Type را از اشیاء مجزا در مجموعه بررسی کنید تا مشخص کنید که چه نوع شی است. اکسل دو نوع شی را تعریف می کند که می توانند به مجموعه Sheets تعلق داشته باشند:
- xlکاربرگ. این یک کاربرگ معمولی است.
- xlChart. این یک نمودار است.
دو نوع شیء زیر هنوز توسط Microsoft Excel پشتیبانی می شوند، اما مایکروسافت توصیه می کند که آنها را به آخرین نسخه Microsoft VBA منتقل کنید. (برای اطلاعات بیشتر در مورد کار با ماکروهای Excel 4.0 به صفحه وب فهرست شده در زیر مراجعه کنید.):
- xlExcel4MacroSheet. این یک برگه ماکرو است، همانطور که در Excel 4.0 استفاده می شود.
- xlExcel4IntlMacroSheet. این یک صفحه ماکرو بین المللی است که در Excel 4.0 استفاده می شود.
https://support.office.com/en-us/article/Working-with-Excel-4-0-macros-BA8924D4-E157-4BB2-8D76-2C07FF02E0B8
ممکن است وسوسه شوید که فکر کنید نگاه کردن به لیست انواع برگه کافی است. با این حال، جالب است که اکسل همیشه آنچه را که برای ویژگی Type انتظار دارید برمی گرداند. در عوض، اگر ویژگی Type را برای نمودار بررسی کنید، مقداری برابر با xlExcel4MacroSheet برمی گرداند. این می تواند برای هر ماکرو مشکلی ایجاد کند.
پس راه حل این است که نام هر مورد در مجموعه Sheets را با موارد موجود در مجموعه نمودارها مقایسه کنید. اگر نام در هر دو مجموعه باشد، پس می توان فرض کرد که برگه یک نمودار است. اگر در هر دو وجود ندارد، می توانید بیشتر تجزیه و تحلیل کنید تا ببینید کاربرگ یکی از انواع دیگر است یا خیر. ماکرو زیر، SheetType، دقیقاً از این روند پیروی می کند:
Sub SheetType()
Dim iCount As Integer
Dim iType As Integer
Dim sTemp As String
Dim oChart As Chart
Dim bFound As Boolean
sTemp = ""
For iCount = 1 To Sheets.Count
iType = Sheets(iCount).Type
sTemp = sTemp & Sheets(iCount).Name & " is a"
bFound = False
For Each oChart In Charts
If oChart.Name = Sheets(iCount).Name Then
bFound = True
End If
Next oChart
If bFound Then
sTemp = sTemp & " chart sheet."
Else
Select Case iType
Case xlWorksheet
sTemp = sTemp & " worksheet."
Case xlChart
sTemp = sTemp & " chart sheet."
Case xlExcel4MacroSheet
sTemp = sTemp & "n Excel 4 macro sheet."
Case xlExcel4IntlMacroSheet
sTemp = sTemp & "n Excel 4 international macro sheet"
Case Else
sTemp = sTemp & "n unknown type of sheet."
End Select
End If
sTemp = sTemp & vbCrLf
Next iCount
MsgBox sTemp
End Sub
هنگامی که ماکرو را اجرا می کنید، یک کادر پیام واحد را می بینید که نام هر برگه را در ورک بوک شما به همراه نوع برگه آن نشان می دهد.
در نهایت، به یاد داشته باشید که این کد به شما می گوید که چه نوع برگه هایی در یک ورک بوک وجود دارد. به شما نمی گوید که آنها در چه نوع ورک بوک هستند. (به عبارت دیگر، ماکرو اهمیتی نمی دهد که در چه نسخه ای از Excel کار می کنید.)