
Удаленые данных в таблицах всегда востребовано, что бы поддерживать её актуальность. Основная задача удаления это отсутствие ошибок, так как удаленные данные нередко восстановить не получается. Данная функция весьма полезна при наличии огромного массива табличных данных.
Создайте в EXCEL таблицу следующего вида:
| A | B | C |
1 | Код товара | Наименование | Количество |
2 | 349 | Яблоки | 10 |
3 | 526 | Груши | 20 |
4 | 140 | Апельсины | 14 |
Перейдите в VBA (Alt+F11) . Создайте форму следующего вида:
Удаление товара будем вести по столбцу «Код товара». Код будет выбираться из списка (ComboBox). После выбора кода будут заполняться соответствующие текстовые поля для наименования и количества товара.
Программных кодов будет несколько.
Первый программный код привязываем к списку ComboBox1. Событие для этого элемента управления – Change, т.е. что происходит при изменении элемента управления? В нашем случае при выборе кода товара из списка (т.е. при изменении элемента управления) должна быть найдена строка в таблице, соответствующая этому коду и данные из этой строки (наименование и количество товара) должны попадать в текстовые поля формы.
Итак, делаем щелчок на ComboBox1, попадаем в окно редактирования кода:
Private Sub ComboBox1_Change()
End Sub
Создаем программу следующего вида:
Private Sub ComboBox1_Change()
ActiveWorkbook.Sheets("Лист1").Select
'вводим вспомогательные переменные i, j n
' в переменной i перебираются номера строк из базы данных начиная со второй и ‘заканчивая последней непустой строкой
' номер которой определен в переменной Строка
' переменная j выполняет роль счетчика, учитывающего количество отобранных ‘вариантов
Dim i As Integer
Dim j As Integer
Dim n As Integer
Dim Строка As Integer
Строка = Application.CountA(Sheets("Лист1").Columns(1))
i = 1
Do
i = i + 1
If Cells(i, 1) = " " Then
j = i
Exit Do
End If
Loop
' Заполнение полей формы
For n = 2 To i
If ComboBox1.Text = Cells(n, 1).Value Then
TextBox1.Value = Cells(n, 2)
TextBox2.Value = Cells(n, 3)
End If
Next n
End Sub
Далее напишем код программы для заполнения списка ComboBox1 данными из первого столбца таблицы (обратите внимание, что в предложенном варианте коды товаров не должны повторяться. В вашей работе вы должны учесть, что коды товаров могут быть одинаковы, и дважды в ComboBox1 они попадать не должны).
Программный код привязываем также к элементу ComboBox1, но событие – Enter
Private Sub ComboBox1_Enter()
ComboBox1.Clear
Sheets("Лист1").Select
Dim i As Integer, j As Integer, Строка As Integer
Строка = Application.CountA(Sheets("Лист1").Columns(1))
i = 2
Do While i <= Строка
i = i + 1
If Cells(i, 1) = " " Then
j = i
Exit Do
End If
Loop
For a = 2 To i
ComboBox1.AddItem Cells(a, 1)
Next a
End Sub
Далее запишем код программы для элемента управления Кнопка (Удалить). Т.е. как будет происходить непосредственное удаление данных из таблицы при выборе конкретного кода товара:
Private Sub CommandButton1_Click()
Me.Hide
If ComboBox1.Text = Empty Then
MsgBox "Вы должны выбрать код изделия"
Me.Show
Else
f = MsgBox("Сейчас произойдет удаление", vbOKCancel)
End If
If f = vbOK Then
Sheets("Лист1").Select
Dim i As Integer
Dim j As Integer
Dim Строка As Integer
Строка = Application.CountA(Sheets("Лист1").Columns(1))
i = 2
Do While i <= Строка
i = i + 1
If Cells(i, 1) = " " Then
j = i
Exit Do
End If
Loop
For b = 2 To i
If ComboBox1.Text = Cells(b, 1) Then
Cells(b, 1).Select
Selection. EntireRow. Delete
End If
Next b
End If
End Sub
И последний код: очистка полей формы при активизации:
Private Sub UserForm_Activate()
TextBox1.Text = " "
TextBox2.Text = " "
ComboBox1.Text = " "
End Sub
Не забудьте создать код и для кнопки «Закрыть»:
Private Sub CommandButton2_Click()
UserForm1.Hide
End Sub