Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metod_VBA_1.doc
Скачиваний:
10
Добавлен:
03.05.2019
Размер:
1.01 Mб
Скачать

Задание 9.2

Создадим форму, которая позволяет редактировать имеющуюся на листе таблицу: добавлять, удалять, изменять значения строк (записей). Для просмотра таблицы в форме имеется элемент ListBox. Свойство MultiSelect этого элемента рано 2, что позволяет выделять любое количество записей. Кнопка «Удалить» предназначена для удаления выделенных записей. Кнопка «Новая запись» позволяет добавить новую запись перед текущей, причем одновременно в элемент ListBox и на рабочий лист. Кнопка «Изменить» служит для редактирования текущей записи. В этом случае выводится другая форма (она приведена ниже), на которой имеются элементы, показывающие значения полей. Кнопка «Выход», как обычно, используется для завершения работы.

Далее приведен текст модуля этой формы. Обратите внимание, что переменные в начале модуля описаны как Public. Это нужно для того, чтобы мы могли их использовать в другом модуле. Для загрузки элементов в список применен метод AddItem. Свойство RowSource в данном случае использовать нельзя, так как тогда будет невозможно удалять элементы списка. Удаление ячеек рабочего листа выполняется со сдвигом оставшихся ячеек вверх, при этом удаляются только те ячейки, которые относятся к таблице.

'Модуль UserForm2

Public MyRng As Range

Public RMin As Integer, RMax As Integer

Public CMin As Integer, CMax As Integer

Public CCount As Integer

Public NewI As Boolean

Private Sub CommandButton1_Click() 'Кнопка "Удалить"

For i = ListBox1.ListCount - 2 To 0 Step -1

If ListBox1.Selected(i) Then

'Удаляем элементы из списка

ListBox1.RemoveItem (i)

'удаляем элементы с рабочего листа

Range(Cells(RMin + i, CMin), _

Cells(RMin + i, CMax)).Delete Shift:=xlUp

End If

Next i

End Sub

Private Sub CommandButton2_Click() 'Кнопка "Новая запись"

NewI = True

UserForm3.Show

End Sub

Private Sub CommandButton3_Click() 'Кнопка "Изменить"

NewI = False

UserForm3.Show

End Sub

Private Sub CommandButton4_Click() 'Кнопка "Выход"

UserForm2.Hide

End Sub

Private Sub UserForm_Initialize()

Set MyRng = ActiveCell.CurrentRegion.Cells

RMin = MyRng.Rows(1).Row + 1

RMax = MyRng.Rows(MyRng.Rows.Count).Row

CMin = MyRng.Columns(1).Column

CMax = MyRng.Columns(MyRng.Columns.Count).Column

CCount = MyRng.Columns.Count

ListBox1.ColumnCount = CCount

'Загружаем список

For i = RMin To RMax + 1

ListBox1.AddItem Cells(i, CMin)

ListBox1.List(i - RMin, 1) = Cells(i, CMin + 1)

ListBox1.List(i - RMin, 2) = Cells(i, CMin + 2)

ListBox1.List(i - RMin, 3) = Cells(i, CMin + 3)

Next

ListBox1.ListIndex = 0

ListBox1.MultiSelect = fmMultiSelectMulti

End Sub

Эта форма используется для ввода в таблицу новой записи и для редактирования существующих. На форме имеются 4 элемента Надпись, 4 текстовых поля и 2 кнопки.

В приведенном тексте модуля обратите внимание на то, как можно сослаться на элементы и переменные, находящиеся в другом модуле. Значение переменной NewI определяется в модуле UserForm2. Оно устанавливает вид операции (True – добавить запись, False – редактировать запись). Тексты надписей (названия полей) берутся с рабочего листа при загрузке формы. При добавлении записи в таблицу сначала вставляются новые ячейки, при этом существующие сдвигаются вниз, а затем в эти ячейки заносится информация.

'Модуль UserForm3

Dim n As Integer

Dim RMin As Integer

Dim CMin As Integer, CMax As Integer

Private Sub CommandButton1_Click()

'Добавляем или редактируем запись в элементе ListBox1

If UserForm2.NewI Then

UserForm2.ListBox1.AddItem TextBox1.Text, n

Else

UserForm2.ListBox1.List(n, 0) = TextBox1.Text

End If

UserForm2.ListBox1.List(n, 1) = TextBox2.Text

UserForm2.ListBox1.List(n, 2) = TextBox3.Text

UserForm2.ListBox1.List(n, 3) = TextBox4.Text

'Добавляем или редактируем запись на рабочем листе

If UserForm2.NewI Then

Range(Cells(RMin + n, CMin), _

Cells(RMin + n, CMax)).Insert Shift:=xlDown

End If

Cells(RMin + n, CMin) = TextBox1.Text

Cells(RMin + n, CMin + 1) = TextBox2.Text

Cells(RMin + n, CMin + 2) = TextBox3.Text

Cells(RMin + n, CMin + 3) = TextBox4.Text

UserForm3.Hide

End Sub

Private Sub CommandButton2_Click()

UserForm3.Hide

End Sub

Private Sub UserForm_Activate()

n = UserForm2.ListBox1.ListIndex

If UserForm2.NewI Then

TextBox1.Text = ""

TextBox2.Text = ""

TextBox3.Text = ""

TextBox4.Text = ""

Else

TextBox1.Text = Cells(RMin + n, CMin)

TextBox2.Text = Cells(RMin + n, CMin + 1)

TextBox3.Text = Cells(RMin + n, CMin + 2)

TextBox4.Text = Cells(RMin + n, CMin + 3)

End If

End Sub

Private Sub UserForm_Initialize()

n = UserForm2.ListBox1.ListIndex

RMin = UserForm2.RMin

CMin = UserForm2.CMin: CMax = UserForm2.CMax

Label1.Caption = Cells(RMin - 1, CMin)

Label2.Caption = Cells(RMin - 1, CMin + 1)

Label3.Caption = Cells(RMin - 1, CMin + 2)

Label4.Caption = Cells(RMin - 1, CMin + 3)

End Sub

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]