vbval против публичной переменной
В VBA я обычно определяю общие переменные как Public, а не как создание ссылок с помощью byVal или byRef. Чаще всего я вызываю подпрограмму или функцию, чтобы установить значение для указанной переменной. Кто-нибудь, пожалуйста, объясните мне преимущество использования byVal / byRef по сравнению с простым созданием публичного var?
1 ответ
Это связано с тем, как вы определяете архитектуру. Ну, VBA - это не совсем ООП-язык, и именно поэтому этот вопрос возник у вас в голове.
Публичные переменные хранятся (сохраняют свое значение) до тех пор, пока экземпляр модуля (в котором они объявлены) находится в памяти. Например, общедоступные переменные - это общие. Модули удерживаются до тех пор, пока не будет открыта книга ThisWorkbook (за исключением случаев, когда есть ошибки времени выполнения). С другой стороны, открытые переменные в модулях UserForm хранятся до тех пор, пока не будет открыт экземпляр UserForm. Публичные переменные в модулях классов являются "свойствами" и хранятся до тех пор, пока переменная экземпляра класса не окажется в памяти. В других языках ООП, где все основано на классах, нет так называемых общедоступных переменных... они, как я сказал, "свойства" и удерживаются до загрузки экземпляра класса.
ByVal (byValue) или ByRef(byReference) - это просто средство передачи переменных в качестве параметров (в зависимости от того, что вам нужно в функции).
Что лучше: из моего предыдущего опыта публичные переменные в VBA действительно просты в реализации, но с ними легче связываться. Слишком много открытых переменных = Слишком много времени для отладки. Используйте только 2~3 открытых переменных и создавайте свои коды в классах для хранения свойств. Таким образом, когда вы переходите на другие языки, вы будете дома:)