Найти в Дзене
Макрос решает

Как сохранить изменения в базе данных через форму в Excel VBA: третий этап редактирования

Пошаговая инструкция, как реализовать редактирование записей базы данных через пользовательскую форму в Excel VBA: обработка вкладок, глобальные переменные, предотвращение перезапуска событий и очистка формы. С примерами кода и пояснениями. 💡 Бонус: файл-шаблон формы редактирования базы данных, который можно использовать и дорабатывать под собственные нужды. Мы подошли к ключевой части работы с формами в Excel VBA — сохранение отредактированных данных обратно в базу. Предыдущие шаги научили нас: Теперь пришло время связать это всё вместе. Если пользователь выбрал запись и изменил, к примеру, цену курса, наша форма должна внести эти изменения именно в ту строку, откуда данные пришли. В начале процедуры CommandButton_Click, отвечающей за кнопку Сохранить, мы должны различать, на какой вкладке находится пользователь: Если на вкладке "Новый" — добавляем запись,
если на вкладке "Редактировать" — обновляем существующую. Для этого применим конструкцию: If MultiPage1.SelectedItem.Caption = "
Оглавление

Пошаговая инструкция, как реализовать редактирование записей базы данных через пользовательскую форму в Excel VBA: обработка вкладок, глобальные переменные, предотвращение перезапуска событий и очистка формы. С примерами кода и пояснениями.

💡 Бонус: файл-шаблон формы редактирования базы данных, который можно использовать и дорабатывать под собственные нужды.

Редактирование данных из формы: логика, код и нюансы

Мы подошли к ключевой части работы с формами в Excel VBA — сохранение отредактированных данных обратно в базу. Предыдущие шаги научили нас:

  • добавлять записи в таблицу;
  • предотвращать дублирование ID;
  • создавать выпадающий список с данными;
  • автоматически заполнять поля формы при выборе ID.

Теперь пришло время связать это всё вместе. Если пользователь выбрал запись и изменил, к примеру, цену курса, наша форма должна внести эти изменения именно в ту строку, откуда данные пришли.

Определяем, в каком режиме работает форма

В начале процедуры CommandButton_Click, отвечающей за кнопку Сохранить, мы должны различать, на какой вкладке находится пользователь:

Если на вкладке "Новый" — добавляем запись,

если на вкладке "Редактировать" — обновляем существующую.

Для этого применим конструкцию:

If MultiPage1.SelectedItem.Caption = "Новый" Then
' Добавление новой записи
Else
' Режим редактирования
End If

Глобальная переменная для хранения строки

Для того чтобы знать, в какую строку базы вносить изменения, мы должны сохранить номер этой строки. Но переменная i, определённая в другом макросе, не сохраняется после завершения кода.

Объявим глобально:

Public i As Integer

Теперь переменная будет жить в модуле и доступна в любом обработчике.

Код VBA: перенос данных из формы в строку базы

Вот пример кода, который срабатывает при сохранении в режиме редактирования:

Cells(i, 2).Value = TB_Name_R.Text
Cells(i, 3).Value = TB_Desk_R.Text
Cells(i, 4).Value = Val(TB_Price_R.Text)
Cells(i, 5).Value = Cmb_Category_R.Text

Предотвращение повторного срабатывания события Change

Если при записи данных обновляется список ComboBox, это автоматически запускает его событие Change, которое может "перезаписать" форму исходными данными.

Чтобы избежать этого, создаём ещё одну глобальную переменную:

Public MyOnOff As Boolean

В начале записи данных:

MyOnOff = True

После завершения:

MyOnOff = False

А в обработчике Change:

If MyOnOff = True Then Exit Sub

Это позволяет спокойно вносить изменения в таблицу, не перезапуская подгрузку данных в форму.

Очистка полей после редактирования

После успешного сохранения — обнуляем поля, чтобы форма была готова к следующему редактированию:

Cmb_ID_R.Text = ""
TB_Name_R.Text = ""
TB_Desk_R.Text = ""
TB_Price_R.Text = ""
Cmb_Category_R.Text = ""

Полный фрагмент кода в режиме редактирования

Вот ключевая часть кода, которая срабатывает при активной вкладке "Редактировать":

If MultiPage1.SelectedItem.Caption <> "Новый" Then
MyOnOff = True
Cells(i, 2).Value = TB_Name_R.Text
Cells(i, 3).Value = TB_Desk_R.Text
Cells(i, 4).Value = Val(TB_Price_R.Text)
Cells(i, 5).Value = Cmb_Category_R.Text
MyOnOff = False
Cmb_ID_R.Text = ""
TB_Name_R.Text = ""
TB_Desk_R.Text = ""
TB_Price_R.Text = ""
Cmb_Category_R.Text = ""
End If

Проверка в действии

Выбираем курс, например «Веб-разработчик 2020». Меняем название на «Веб-разработчик 2022». Нажимаем Сохранить. Проверяем таблицу — всё изменилось. Повторим: снова выберем этот курс, добавим «###» в описание и опять сохраним. Всё работает.

Подписка и комментарии

Если вы хотите получить ещё больше практических примеров, шаблонов, чек-листов, гайдов и кодов VBA — подпишитесь на наш канал на Дзене и на наш канал в Телеграм. А также обязательно напишите в комментариях, какие темы вам интересны.

Ваш отклик — наше топливо 💡

Кстати, в Телеграм уже есть файл-шаблон формы редактирования базы данных, который можно использовать и дорабатывать под собственные нужды.