Я выяснил причину

Ничего там по кругу не инкрементится. Просто компилятор игнорирует старшие байты. По типу индексной переменной берет байты а остальные просто отбрасывает. Результат в итоге неоднозначный...
Оказывается что можно даже так писать:
dim a(5) as string
a(10)="abracadabra"
В этом случае все отработает тоже без ошибок. Но a(10) будет содержать ноль. Правда иногда, если обратиться опять же к левому индексу, элемент (несуществующий) массива может содержать какое нибудь значение.