This is somewhat similar to DRJ's, although I have put in the error handling for multiple worksheets in a sequential number ordering. ...
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long, n As Long, cnt As Long, fName As String, fLen As Long
If Target.Address <> "$A$1" Then Exit Sub 'check for addy
If Target.Value = "" Then Exit Sub 'check for blank
Application.ScreenUpdating = False
Application.DisplayAlerts = False
cnt = 0
For i = Len(Target) To 1 Step -1
If Mid(Target, i, 1) = Chr$(32) Then Exit For
Next i
fName = Left$(Target, 1) & Mid(Target, i + 1, 1)
fLen = Len(fName)
checkAgain:
If Me.Name = fName Then GoTo exitHere
If CheckSheet(fName) Then
cnt = cnt + 1
fName = Left$(fName, fLen) & cnt
GoTo checkAgain
End If
Me.Name = fName
exitHere:
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Function CheckSheet(wsName As String) As Boolean
Dim ws As Worksheet
On Error Resume Next
Set ws = Sheets(wsName)
On Error GoTo 0
CheckSheet = IIf(ws Is Nothing, False, True)
End Function
Let me know how it works for you.