پت متعجب است که آیا راه سریعی برای حروف الفبا کردن کاربرگ ها در ورک بوک او وجود دارد. هیچ روش داخلی برای انجام این کار وجود ندارد، اما می توان از یک ماکرو برای انجام مرتب سازی برای شما استفاده کرد. دو رویکرد را در این نکته ارائه می کنم. اولی یک راه ساده برای انجام مرتب سازی ارائه می دهد.
Sub SortSheets1()
Dim I As Integer
Dim J As Integer
For I = 1 To Sheets.Count - 1
For J = I + 1 To Sheets.Count
If UCase(Sheets(I).Name) > UCase(Sheets(J).Name) Then
Sheets(J).Move Before:=Sheets(I)
End If
Next J
Next I
End Sub
این ماکرو برگه های کاربرگ را بر اساس نام به ترتیب صعودی مرتب می کند. اگر می خواهید آنها را به ترتیب نزولی مرتب کنید، تنها کاری که باید انجام دهید این است که > را در خط مرکزی به < تغییر دهید.
اگر تعداد نسبتاً کمی کاربرگ در ورک بوک خود داشته باشید، ماکرو عالی کار می کند. اگر هنگام اجرای ماکرو متوجه شدید که اجرای آن زمان زیادی می برد، ممکن است بخواهید از الگوریتم مرتب سازی کارآمدتری در ماکرو استفاده کنید. به عنوان مثال، نسخه زیر نسخه ای است که نام همه کاربرگ ها را در یک آرایه می خواند، آرایه را با استفاده از الگوریتم BubbleSort مرتب می کند و سپس ترتیب واقعی را انجام می دهد:
Sub SortSheets2()
Dim I As Integer
Dim sMySheets() As String
Dim iNumSheets As Integer
iNumSheets = Sheets.Count
Redim sMySheets(1 To iNumSheets)
For I = 1 To iNumSheets
sMySheets(I) = Sheets(I).Name
Next I
BubbleSort sMySheets
For I = 1 To iNumSheets
Sheets(sMySheets(I)).Move Before:=Sheets(I)
Next I
End Sub
Sub BubbleSort(sToSort() As String)
Dim Lower As Integer
Dim Upper As Integer
Dim I As Integer
Dim J As Integer
Dim K As Integer
Dim Temp As String
Lower = LBound(sToSort)
Upper = UBound(sToSort)
For I = Lower To Upper - 1
K = I
For J = I + 1 To Upper
If sToSort(K) > sToSort(J) Then
K = J
End If
Next J
If I <> K Then
Temp = sToSort(I)
sToSort(I) = sToSort(K)
sToSort(K) = Temp
End If
Next I
End Sub
هر کسی که برای مدتی برنامه نویسی کرده باشد، می داند که BubbleSort یک روال مرتب سازی همه منظوره خوب است، اما موارد سریع تری نیز وجود دارد. به عنوان مثال، اگر تعداد کمی کاربرگ دارید، و آنها بسیار نامرتب شروع به کار می کنند، ممکن است متوجه شوید که الگوریتم QuickSort سودمندتر است. تنها کاری که برای تغییر موارد فوق برای استفاده از QuickSort باید انجام دهید این است که الگوریتم QuickSort را به عنوان یک برنامه فرعی اضافه کنید (الگوریتم را می توانید در هر کتاب برنامه نویسی خوب ویژوال بیسیک پیدا کنید) و سپس رویه را از داخل ماکرو اصلی SortSheets فراخوانی کنید. (این به معنای تغییر خطی است که اکنون BubbleSort نامیده می شود.)
تفاوت دیگری بین این ماکرو دوم و اولی وجود دارد. ماکرو اول به حروف متنی که برای نام گذاری کاربرگ های شما استفاده می شود توجهی نمی کند. بنابراین، MyWorksheet مانند MYWORKsheet مشاهده می شود. ماکرو دوم به حروف متن توجه می کند و بر اساس آن مرتب می کند. البته، این مسئله چندان مهمی نیست، زیرا اکسل به حروف کوچک و بزرگ در نام کاربرگ ها نیز توجه نمی کند.
فقط یک نکته سریع: روال BubbleSort که در بالا نشان داده شده است ماهیتی همه منظوره دارد. این بدان معناست که برای مرتب سازی هر آرایه ای کار می کند، نه فقط برای مرتب سازی نام برگه های کاربرگ.