One more? Close to Paul's I believe; I just left the numbers as numbers.
Option Explicit
Sub aTry()
Dim rng As Range
Dim arr
Dim n As Long
Set rng = Selection
If (Not rng.Columns.Count = 1) Or (Not rng.Rows.Count > 1) Then
MsgBox "Uhmmmm...."
Exit Sub
End If
arr = rng.Value
rng.Clear
For n = 1 To UBound(arr)
If Not arr(n, 1) = vbNullString Then
If IsNumeric(arr(n, 1)) Then
rng.Cells(n).NumberFormat = CStr("00000000")
Else
arr(n, 1) = arr(n, 1) & Right$("XXXXXXXX", Application.Max(0, 8 - Len(arr(n, 1))))
End If
End If
Next
rng.Value = arr
End Sub