Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скрытые перемещения.docx
Скачиваний:
11
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

Как поставить значение по умолчанию в ComboBox?

Если нам необходимо по умолчанию поставить какого-то сотрудника, например Василий, то в коде инициализации формы необходимо добавить ещё одну строку.

Private Sub UserForm_Initialize()

Dim Imena As String

Dim a As Byte

For a = 2 To 9 Step 1

Imena = Cells(a, 1)

Sotrudniki.AddItem Imena

Next a

Sotrudniki.ListIndex = 0 'отвечает за выбор сотрудника

End Sub

Обратите внимание, что номерация списка в ComboBox начинается с 0. То-есть если нам по умолчанию надо будет прописать Екатерину, то.

Sotrudniki.ListIndex = 1

Запрет ввода данных в ComboBox

Теперь необходимо доработать ещё один момент - это запрет ввода данных в ComboBox Вручную. Добавим в код инициализации формы ещё одну строчку, которая будет запрещать вносиьт изменеия в выпадающем списке.

Private Sub UserForm_Initialize()

Dim Imena As String

Dim a As Byte

For a = 2 To 9 Step 1

Imena = Cells(a, 1)

Sotrudniki.AddItem Imena

Next a

Sotrudniki.ListIndex = 0 'Отвечает за выбор сотрудника

Sotrudniki.Style = fmStyleDropDownList 'Запрет ввода данных

End Sub

Sotrudniki.Style = fmStyleDropDownList - именно эта надпись позволяет запретить ввод данных в ComboBox.

Ну вот, теперь мы можем создать свой собственный выпадающий список, обработать выбранные данные и поставить запрет на ввод данных в ComboBox.

Ускоряем работу макроса в Excel

Чем больше познаём мы макросы, тем интересней выгледят наши программы. А бывает, что их выполнение происходит очень долго, при сложных и долгих математических расчётах или составлении каких-то отчётов и табилц. В ходе выполнения макроса на мониторе происходит мелькание различных окон, открытие и закрытие книг, и прочая светомузыка. Для того чтобы этого не происходило, и чтобы время выполнение нашего макроса сократить раз в 100, можно воспользоваться командами описанные ниже.

Application.ScreenUpdating

Application.ScreenUpdating - отвечает за обновление экрана и может принимать два значения - False (обновление экрана отключено) и True (обновление экрана включено). В коде это обычно прописывается в том месете, где происходит мелькание различных окон или видно как производится расчёт и происходит заполнение таблицы. Ниже показан пример заполнения ячеек, и данную команду вставили в начало и конец макроса, т.е. сначала отключаем обновление экрана, а потом включаем обновление экрана. При такой записи мы не увидим процесс заполнения ячеек. А вот если убрать эти команды, то мы сможем наблюдать за процессом заполнения этих ячеек.

Sub Primer()

Application.ScreenUpdating = False

For a = 1 To 100

For b = 1 To 100

Cells(a, b) = "Пример"

Next b

Next a

Application.ScreenUpdating = True

End Sub

Application.Calculation

Application.Calculation - отвечает за автоматический расчёт в книге Excel и может принимать два значения - xlCalculationManual(ручной расчёт) и xlCalculationAutomatic (автоматический расчёт - по умолчанию установлен в Excel). Но тут есть одна осторожность, если вы перевели Excel в ручной расчёт, и в макросе произошла ошибка и он так и не выполнился до конца - т.е. не включился автоматический расчёт формул, то все ваши вычисления в дальнейшем будут в пустую. Так как формулы не будут автоматически пересчитываться, Excel превратиться в обычную таблицу. Но данная команда играет одну из основных ролей в быстроте выполнеия макроса. Вообщем лучше сделать код, который исключает ошибки, чтобы макрос полюбому выполнился и Excel перевёлся в автоматический расчёт. Если у Вас имеется большая таблица с многочисленными формулами, и часть вычислений вы производите при помощи макросов, то для быстроты выполнения расчётов разумно в начало и конец кода поместить команду Application.Calculation.

Sub Primer2()

Application.Calculation = xlCalculationManual

...................

...................

...................

Application.Calculation = xlCalculationAutomatic

End Sub

Application.EnableEvents

Application.EnableEvents - команда отвечающая за выполнение сторонних событий. Эту команду мы уже затрагивали в этом уроке. И она также может принимать два значения - это False (отключить собтие) и True (включить выполнение промежуточных событий). Но теперь ещё известно, что она играет значительную роль в скорости выполнения некоторых кодов макроса. Пример можно взять из Урока №23.

Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False

Target.Cells = "Привет"

Application.EnableEvents = True

End Sub

ActiveSheet.DisplayPageBreaks

ActiveSheet.DisplayPageBreaks - отображение границ листа. Может принимать два значения - False (отключить отображение границ) и True (включить отображение границ). Не знаю как это помогает на скорости выполнения макроса, лично я этого не ущутил, но некоторые говорят, что помогает. Я вообще не люблю когда отображаются границы листа, мне кажется, что это нужно только при распечатке. Помещать этот код можно в начало и конец макроса.

Private Sub Worksheet_Change(ByVal Target As Range)

ActiveSheet.DisplayPageBreaks = False

.........................

.........................

.........................

ActiveSheet.DisplayPageBreaks = True

End Sub

Application.DisplayStatusBar

Application.DisplayStatusBar - строка состояния. Может принимать два значения - False (отключить строку состояния) и True (включить строку состояния). При выполнении макросов в строке состояния отображаются все происходяще события. Для того чтобы не тратить время на просчёт событий и прорисовку их в статусбаре, отключаем её на время выполнения макроса, и включаем её когда макрос закончил выполняться.

Private Sub Worksheet_Change(ByVal Target As Range)

Application.DisplayStatusBar = False

.........................

.........................

.........................

Application.DisplayStatusBar = True

End Sub

Application.DisplayAlerts

Application.DisplayAlerts - команда отвечающая за события в Excel. Может принимать два значения - False (отключаем запросы Excel) и True (включаем события Excel). Это чень интересная и полезная команда при помощи которой можно отключить запросы Excel, например, чтобы он не спрашивал нужно ли сохранить изменения в книге, или отключить запрос на совместимость версий Excel. Ниже приведён пример, в котором книга закрывает сама себя, при этом независимо от того внесли вы изменения или нет в книгу, при закрытии книги вам не поступит запрос "Сохранить изменения", а книга просто закроется без сохранения и уведомления пользователя.

Sub Primer()

Application.DisplayAlerts = False

ThisWorkbook.Close

Application.DisplayAlerts = True

End Sub