Sub Button1_Click()
Private Sub filename_cellvalue()
Sub
операторы объявляют область действия процедуры.Синтаксис выглядит следующим образом:
{accessibility} Sub {name} ({args})
{statements}
End Sub
Где модификатор {accessibility}
, список параметров {args}
и {statements}
в теле являются необязательными (обратите внимание, что без модификатора доступа процедура неявно Public
- тогда как во многих других языках [включая VB.NET] неявное значение по умолчанию - Private
; лучше всего указывать здесь явное).
Такой синтаксис делает вложенные Sub
заявления недопустимыми:
Sub DoSomething()
Sub Illegal()
End Sub
End Sub
Поэтому, когда компилятор встречает оператор Sub
, все, что следует, рассматривается как часть тела процедуры, вплоть до следующего End Sub
токена.
ЕслиОбработчик Button1_Click
является допустимым, его нужно правильно завершить до того, как Sub filename_cellvalue
начинается:
Sub Button1_Click()
End Sub
Private Sub filename_cellvalue()
'...
End Sub
В противном случае неполный оператор Sub Button1_Click()
необходимо удалить.
При этом filename_cellvalue
является плохим идентификатором для процедуры: Sub
процедуры делают что-то , их имена должны начинаться с глагола.ExportAsPDF
было бы более подходящим, например.Обратите внимание на имя PascalCase
, в отличие от lower_snake_case
: символ подчеркивания имеет особое значение в VBA, о чем свидетельствует Button1_Click
.
Подчеркивание отделяет источник интерфейса / события от члена интерфейса / имени события: Button1_Click
вызывается, когда объект Button1
вызывает свое событие Click
, и присвоение этой процедуре чего-либо другого разорвало бы ссылкумежду объектом и обработчиком событий: процедура никогда не будет запускаться в ответ на Click
на Button1
.Использование подчеркивания в процедурах, не являющихся обработчиками, особенно если public, будет вызывать проблемы (читай: больше ошибок компиляции), когда вы входите в более продвинутые концепции объектно-ориентированного программирования, включающие интерфейсы и полиморфизм.