non fa ESATTAMENTISSIMAMENTE quello che chiedi, però è adattabile:

codice:
'per stampare il menu numerico delle pagine
function stampaPagine(totPagine,attuale)
dim max,lstart,tstart,txt,nxt,bxt,totale

totale=totPagine

dim href_class,var_page,selected_class,separatore

'*********************** SETTINGS
max=5 				'numero di link visualizzati contemporaneamente
href_class="" 		'classe da applicare al link dei collegamenti
var_page="pagina"	'variabile in querystring con il numero di pagina richiesta
selected_class="" 	'classe per la pagina selezionata
separatore=" - "	'separatore dei numeri
'*********************** END SETTINGS

if totale<= max then
	lstart=1
	tstart=totale
else
	mtp=int(attuale/max)
	lstart=max*(mtp)
	tstart=lstart+max
end if

if attuale>1 then
	bxt=attuale-1
	txt=txt & "&lt;&lt;"
	txt=txt & " &lt; "
end if

if lstart=0 then lstart=1
	if tstart>totale then tstart=totale
	
	for i=lstart to tstart
		if i>lstart then txt=txt & separatore
		
		if i=attuale then
			txt=txt & "<span class=""" & selected_class & """>" & i & "</span>"
		else
			txt=txt & " " & i & ""
		end if
	next

nxt=attuale+1
if nxt>totale then nxt=totale
if nxt>=lstart and totale>1 and nxt<totale then txt=txt & " &gt;"
if totale>1 and totale>nxt then txt=txt & " &gt;&gt;" 

stampaPagine=txt
end function




'ricavo la pagina attuale
dim pagina_attuale
pagina_attuale=request.QueryString("pagina")
if len(trim(pagina_attuale))=0 then 
	pagina_attuale=1
else
	pagina_attuale=cint(pagina_attuale)
end if

'numero di pagine totali
dim num_page_totali
num_page_totali=40


response.Write stampaPagine(num_page_totali,pagina_attuale)