
В Excel имеется таблица в которой с помощью формы созданной на Visual Basic for Applications необходимо произвести поиск данных и изменение.
В MS Excel создана таблица следующего вида:
При нажатии на кнопку «Вызов формы» появляется пользовательская форма следующего вида:
На этой форме следующие элементы управления: 6 надписей Lable, Поле со списком ComboBox1 для выбора номера рейса и ListBox1 для списка пассажиров выбранного рейса.
Программные коды следующие:
Сначала вводим переменные:
Dim sss, ads
Программный код для ComboBox1
Private Sub ComboBox1_Change()
' эта процедура очищает ранее заполненные поля формы, и после выбора из списка номера рейса
' заполняет соответствующими фамилиями ListBox1
ListBox1.Clear
Label3.Caption = " "
Label4.Caption = " "
1 For sss = 1 To 500
If ComboBox1.Text = Sheets("Регистрация").Cells(sss, 1).Text Then
ListBox1.AddItem Sheets("Регистрация").Cells(sss, 2).Text
End If
Next
End Sub
Private Sub CommandButton1_Click()
'эта процедура для кнопки "Изменить". После выбора конкретного пассажира заполняются его данные
' в текстовых полях в форме "Изменение данных" (она называется frmChange)
If ListBox1.Text = " " Then MsgBox "Выберите фамилию пассажира": Exit Sub
frmChange.TextBox1.Text = frmПоиск.ListBox1.Text
frmChange.TextBox2.Text = frmПоиск.Label4.Caption
Dim ddd
frmПоиск.Hide
frmChange.Show
End Sub
Private Sub ListBox1_Click()
'после выбора конкретной фамилии в ListBox1 заполняются остальные данные -
' фамилия и № билета. Затем в невидимую надпись Label7 вносится выбранная фамилия
For i = 1 To 800
If ListBox1.Text = Sheets("Регистрация").Cells(i, 2).Text Then
Label3.Caption = Sheets("Регистрация").Cells(i, 2).Text
Label4.Caption = Sheets("Регистрация").Cells(i, 3).Text
Label7.Caption = i
End If
Next
End Sub
Private Sub UserForm_Activate()
' при активизации формы "Поиск" сначала данные сортируются по убыванию номеров рейсов,
' затем заполняется список с номерами рейсов из первого столбца таблицы.
Sheets("Регистрация").Select
Range("A2:C800").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlDescending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
1 For ads = 2 To 800
If Sheets("Регистрация").Cells(ads, 1).Text = "" Then Exit Sub
If Sheets("Регистрация").Cells(ads, 1).Text = Sheets("Регистрация").Cells(ads + 1, 1).Text Then GoTo 3
ComboBox1.AddItem Sheets("Регистрация").Cells(ads, 1).Text
3 Next
End Sub
Форма для изменения данных имеет вид:
Программные коды:
Private Sub CommandButton1_Click()
' переменной ddd присваивается фамилия из невидимой надписи Label7
' затем номер билета из этой строки (ddd), соответствующий данному пассажиру
' заносится в TextBox2
ddd = frmПоиск.Label7.Caption
Worksheets("Регистрация").Cells(ddd, 3) = TextBox2.Text
End Sub
Private Sub CommandButton2_Click()
Sheets("Регистрация").Select
Range("A2:C800").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlDescending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Unload frmChange
Unload frmПоиск
Load frmПоиск
frmПоиск.Show
End Sub