У меня тоже была эта проблема с VBA. Я не могу сказать, что я горжусь тем, как мне удалось получить его, но он поставляется здесь только в том случае, если кто-нибудь еще случайно соскользнет по этому вопросу.
Довольно интересно отлаживать, так как сбой происходит при вызове подчиненного элемента или функции, а не в точке сбоя. К счастью, вы можете проследить код до строки с ошибкой вызываемой подпрограммы, прежде чем она сообщит об ошибке.
Call Sub1(gArray(3))
debug.print gArray(3)
...
Sub Sub1(i as integer)
Redim gArray(0)
End sub
Очевидно, что VB RT это не понравится, так как к моменту выполнения debug.print размер массива не существует. Хорошо, какого черта вы хотите передать глобально объявленный массив в любом случае? Виновен, как предъявлено обвинение.
Таким образом, в приведенном выше примере вы получаете ошибку при вызове на Sub1, но причиной, вызывающей его, является Redim в sub.
Мораль этой истории - не передавать глобальные переменные в качестве параметров для подпрограмм. Другое простое решение - объявить Sub1 немного по-другому:
Sub Sub1(ByVal i as integer)
Это означает, что переменная i
копируется (но не возвращается) Sub.