все глобальные переменные во всех модулях в электронной таблице объявлены немедленно? - PullRequest
1 голос
/ 20 апреля 2020

Я занимаюсь рефакторингом электронной таблицы Excel, которая включает в себя несколько модулей. В объекте ThisWorkbook находится следующий код:

Option Explicit
set ws = ActiveSheet

Во время выполнения кода поток входит в один из модулей. В этом модуле мы находим объявление объекта:

Global ws as Worksheet

Я знаю, что глобальные переменные могут использоваться во всех модулях. Означает ли это, что объявление функции происходит после определения функции? Или все глобальные переменные во всех модулях приложения объявлены перед выполнением какого-либо кода?

1 Ответ

3 голосов
/ 20 апреля 2020

Объявления не являются исполняемым кодом, будь то глобальный, модульный или локально ограниченный (операторы Dim не являются исполняемыми; Dim...As New также не являются исполняемыми). Так что, да, они объявлены «мгновенно». Если модуль загружен (т. Е. Если какой-либо из его членов используется в любом пути выполнения ниже точки входа в ваш код), то все, что он определяет, определено.

Обратите внимание, ключевое слово Global устарело / бесполезно : переменная Global ничем не отличается от любой другой переменной Public.

Как упоминалось в комментариях @BigBen, объект global-scope ws As Worksheet очень похож на тип глобального переменная состояния, которую вы хотели бы устранить в рефакторинге проекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...