los array se dan por empezados en 0 y tienen tantas posiciones como indiques entonces un array de length 5 sería internamente
|_|_|_|_|_| <- 5 elementos
0 1 2 3 4
cuando mueves tu apuntador hasta el 5 pasa que
|x|_|_|_|_| <- apuntador en 0
|_|x|_|_|_| <- apuntador en 1
|_|_|x|_|_| <- apuntador en 2
|_|_|_|x|_| <- apuntador en 3
|_|_|_|_|x| <- apuntador en 4
|_|_|_|_|_|? <- apuntador en 5
si que en
For i = 0 To a.Length
cuando
i es igual a
a.Length, es decir para este caso 5, estarías como dicen en mi pueblo, "orinando fuera del perol"