В коде для ThisWorkbook
вы сможете обрабатывать события рабочей книги , включая событие Open
, которое запускается рабочей книгой при ее открытии.
Перейдите к модулю (дважды щелкните ThisWorkbook
в проводнике проекта VBE [Ctrl + R]), затем найдите раскрывающиеся списки в верхней части панели кода редактора. В раскрывающемся меню слева выберите Workbook
; затем из правого раскрывающегося списка выберите событие Open
; VBE автоматически создает заглушку метода с правильной подписью для вас:
Private Sub Workbook_Open()
End Sub
Обратите внимание, что подчеркивание имеет очень особое значение в VBA; когда называете свои процедуры (особенно неявно или явно Public
), всегда придерживайтесь PascalCase
и избегайте Snake_Case
; это может не иметь значения сейчас , но когда вы станете разработчиком, вы по достоинству оцените согласованность в именовании, а когда вы начнете работать с интерфейсами, это подчеркивает публично Участники программы начнут отличать работающий код от кода, который даже не компилируется: заблаговременное использование полезных привычек избавит вас от головной боли позже.
Теперь вам нужно вызвать две процедуры в этом обработчике.
Когда вы делаете это:
oneRange.Sort Key1:=aCell, Order1:=xlAscending, Header:=xlYes
Вы вызываете метод Sort
объекта oneRange
, который является экземпляром класса Range
.
Когда вы делаете это:
MsgBox "Hi!"
Вы вызываете функцию MsgBox
, которая находится в библиотеке VBA
в модуле Interaction
(найдите ее в браузере объектов [F2]). Это будет эквивалентно:
VBA.Interaction.MsgBox "Hi!"
Итак, чтобы вызвать ваш SearchBox
, а затем ваш SortName
метод, все, что вам нужно сделать, это:
Private Sub Workbook_Open()
SearchBox
SortName 'formerly known as Sort_Name
End Sub
Процедуры делают что-то - их имена всегда должны начинаться с глагола, они действия . «SearchBox» выглядит как имя, а не как действие. В программировании имена больше похожи на классы - Range
, Workbook
и т. Д .; рассмотрите переименование SearchBox
, чтобы лучше передать то, что оно делает . Если это трудно сделать, вероятно, потому что ваша процедура делает слишком много вещей - например, получение имени для фильтрации , а затем применение фильтра к определенной таблице , а затем очистка текста некоторой формы .
Вам также нужно следить за неявными ActiveSheet
ссылками; в настоящее время SortName
предполагает, что такое ActiveSheet
, и это очень вероятно вызовет проблемы в будущем.