Para crear VERDADEROS números aleatorios en VB hay que crear nuestro propio algoritmo usando varios valores variables y combinándolos. Si queremos valores aleatorios necesitamos recurrir a la API de Win2, por ejemplo a las funciones GetTickCount, GetCurrentProcessId, GetCurrentProcess, GetCurrentThreadId. Mezclando los valores devueltos por estas funciones, más la fecha y hora actuales, más algún número generado a partir de una CLSID aleatoria, podemos obtener un número aleatorio.
La idea de un número aleatorio es que no se repita en el tiempo, por lo tanto para crearlo tenemos que intentar usar parámetros que tampoco se repitan en el tiempo.
Abajo dejo un ejemplo sencillo de como generar un nº aleatorio. Para usarlo hay que agregar una referencia a WIN.TLB
Function Rand(Optional Seed As Long) As Currency
Dim lpMem As MEMORYSTATUS
Dim lTime&, lProc&, lProcId&
Dim lDate&, cRand@
If Seed <= 0 Then Seed = Rnd * GetClsidCount
'Datos que se usarán para generar el número aleatorio.
'
Call GlobalMemoryStatus(lpMem)
lTime = timeGetTime
lProc = GetCurrentProcess
lProcId = GetCurrentProcessId
lDate = CLng(Date)
cRand = (lpMem.dwAvailVirtual Mod lTime) Xor _
((lTime Xor (lProc Mod lProcId)) Xor _
(lProcId + (lDate Xor lpMem.dwTotalPageFile)))
Rand = cRand
End Function