در اکسل، انتخاب همه کاربرگ های قابل مشاهده به آسانی با کلیک راست بر روی هر برگه برگه و انتخاب گزینه Select All Sheets است. با این حال، انجام همان کار با کد VBA دشوارتر است.
راهنمای آنلاین Excels استفاده از تابع Array با مجموعه Sheets را برای انتخاب برگه ها بر اساس نام پیشنهاد می کند. این کار زمانی عالی عمل می کند که نام هر برگه را در ورک بوک بدانید. هنگامی که می خواهید کد عمومی برای انتخاب همه برگه ها برای هر ورک بوک ایجاد کنید، این مشکل ایجاد می کند. خبر خوب این است که می توانید از یک نوع تکنیک مایکروسافت برای ارجاع برگه ها با شماره فهرست استفاده کنید. کد زیر است:
Sub SelectSheets()
Dim myArray() As Variant
Dim i As Integer
For i = 1 To Sheets.Count
ReDim Preserve myArray(i - 1)
myArray(i - 1) = i
Next i
Sheets(myArray).Select
End Sub
این عالی کار می کند، مگر اینکه ورک بوک حاوی برگه های مخفی باشد، جایی که Sheets(i).Visible = False. البته، کد بالا را می توان برای نادیده گرفتن کاربرگ های پنهان تنظیم کرد:
Sub SelectSheets()
Dim myArray() As Variant
Dim i As Integer
Dim j As Integer
j = 0
For i = 1 To Sheets.Count
If Sheets(i).Visible = True Then
ReDim Preserve myArray(j)
myArray(j) = i
j = j + 1
End If
Next i
Sheets(myArray).Select
End Sub
با این حال، پارامتر کمی شناخته شده از روش Select وجود دارد: پارامتر Replace. با استفاده از پارامتر Replace، انتخاب تمام صفحات قابل مشاهده بسیار آسان تر می شود:
Sub SelectSheets1()
Dim mySheet As Object
For Each mySheet In Sheets
With mySheet
If .Visible = True Then .Select Replace:=False
End With
Next mySheet
End Sub
توجه داشته باشید که mySheet به جای یک نوع داده Worksheet به عنوان یک نوع داده Object تعریف می شود. این کار به این دلیل انجام می شود که من در آزمایش با یک مشکل با برگه های نمودار مواجه شدم - آنها انتخاب نمی شوند زیرا از نوع کاربرگ نیستند.