
Как Public или Private переменная может быть объявлена только в разделе описаний переменных. С помощью же инструкции (то есть команды, не выполняющей реальных действий) Dim она может быть объявлена и в тексте программы, но тогда ее другие модули уже использовать не смогут никак.
Объявление типа переменных нужно программе, чтобы она заранее отвела под них именно столько оперативной памяти, сколько нужно для размещения именно такой переменной. Для логической — хватит и одного бита, для буквенной — нужен целый байт, а для строковой или числовой — значительно большие обьемы. Можно вообще не объявлять специально переменные, включая их в текст программы по мере надобности, так как тогда VBA присвоит им автоматически специальный для таких случаев тип данных Variant и отведет для каждой переменной максимально возможную область памяти, что, впрочем, не имеет особо отрицательного значения из-за большого обьема оперативной памяти на современных компьютерах.
Тип данных Variant отличается еще и тем, что переменные с таким типом автоматически могут преобразовываться в нужный другой тип, например, если переменная «х» имеет тип Variant и значение 2 (число), то после команды "x=Str(x)", которая преобразует число в строку, она уже будет иметь значение «2», то есть текстовая строка с цифрой «2». Такое преобразование было бы невозможно, если бы переменная «х» была объявлена как Integer.
Может показаться, что определять все переменные как тип Variant или вообще не включать в модуль раздел описаний является очень хорошим решением, однако стоит помнить, что необъявленные переменные не могут быть использованы в других модулях или формах, а, кроме того, переменные типа Variant занимают очень много места в оперативной памяти. Можно запретить для себя использование необъявленных переменных, вставив в начало модуля, в верх раздела описаний инструкцию Option Explicit, и тогда программа остановится и перейдет в режим отладки, если вдруг наткнется на такую переменную.
