Maybe do something like:
Option Explicit
Sub Sort_Active_Book()
Dim i As Integer
Dim j As Integer
Dim iAnswer As VbMsgBoxResult
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Sheets
On Error GoTo change_name
ws.Name = Int(ws.Name)
On Error GoTo 0
Next
iAnswer = MsgBox("Sort Sheets in Ascending Order?" & Chr(10) _
& "Clicking No will sort in Descending Order", _
vbYesNoCancel + vbQuestion + vbDefaultButton1, "Sort Worksheets")
For i = 1 To Sheets.Count
For j = 1 To Sheets.Count - 1
If iAnswer = vbYes Then
If UCase$(Sheets(j).Name) > UCase$(Sheets(j + 1).Name) Then
Sheets(j).Move After:=Sheets(j + 1)
End If
ElseIf iAnswer = vbNo Then
If UCase$(Sheets(j).Name) < UCase$(Sheets(j + 1).Name) Then
Sheets(j).Move After:=Sheets(j + 1)
End If
End If
Next j
Next i
For Each ws In ActiveWorkbook.Sheets
If ws.Name < 1 Then
ws.Name = Mid(Cells(1, ws.Name * 1000).Address, 2, 1)
End If
Next
Exit Sub
change_name:
ws.Name = Cells(1, "" & ws.Name & "").Column / 1000
Resume Next
End Sub
Might not work if your real data is very different to your example though.
Bookmarks