Добавление данных в таблицы
Добавление в таблицы происходит с помощью специальных форм, которые содержат поля, предназначенные для ввода в них соответствующей информации. После ввода необходимо нажать кнопку «Добавить», запуститься процедура, которая вносит в таблицу данные из полей формы. Данные процедуры работают на основе цикла Do While Not IsEmpty(текущая)<>'''' Set следующая = текущая.Offset(1, 0) ………………………… Set текущая = следующая Loop, который работает пока не дойдет до первой пустой ячейки. При этом используются переменные объектного типа, которые используются как следующая и текущая ячейки. Метод OFFSET(i,j) используется для указания на ячейку, отдаленной на i –столбцов и на j - строк относительно данной ячейки. В теле цикла стоит оператор развилки IF…Then… Else… EndIF, который проверяет, нет ли такого же ключа в данной таблице (ключ – уникальное значение для строки, которое однозначно определяет строку). Остальные процедуры также используют этот цикл и имеют сходную структуру программы. Рассмотрим форму для добавления в таблицу «Ассортимент». В этой форме использованы такие элементы как Label, TextBox, CommandButton. На рисунке показано расположение и количество всех необходимых элементов управления. Программный код для кнопки «Добавить»: Dim текущая As Object Dim следующая As Object If TextBox1 = "" Or TextBox3 = "" Then MsgBox ("Введены не все данные") Exit Sub End If ActiveWorkbook.Sheets("Ассортимент").Select Set текущая = ActiveSheet.Range("A2") Do While Not IsEmpty(текущая) Set следующая = текущая.Offset(1, 0) Set текущая = следующая Loop текущая.Value = TextBox1.Text текущая.Offset(0, 1).Value = TextBox2.Text текущая.Offset(0, 2).Value = TextBox3.Text TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" Программный код для кнопки «Отмена»:
UserForm3.Hide Для текстовых полей выполняется проверка. Для текстового поля, в которое вводится наименование изделия, выполняется проверка, чтобы вводимые данные были только текстовые (чтобы нельзя было вводить числа): If IsNumeric(TextBox2.Text) And Len(TextBox2) <> 0 Then MsgBox "Вводить надо текстовые данные!", vbOKOnly + vbInformation TextBox2.Value = "" TextBox2.SetFocus End If Для текстового поля, в которое вводится цена товара, выполняется проверка, чтобы вводимые данные были только числовые (чтобы нельзя было вводить текст):
If TextBox3.Value < 0 Then MsgBox "Числа не должны быть отрицательные!", vbOKOnly + vbInformation TextBox3.SetFocus End If If Not IsNumeric(TextBox3.Text) And Len(TextBox3) <> 0 Then MsgBox "Вводить надо числовые данные!", vbOKOnly + vbInformation TextBox3.Value = "" TextBox3.SetFocus End If
Рассмотрим форму для добавления в таблицу «Регистрация заказов». Особенность такого добавления в том, что продукты в ходе реализации должны выбираться из списка, который формируется с листа «Ассортимент». Для этой цели в форме создан элемент ComboBox, данные в который попадают из первого столбца таблицы «Ассортимент» (т.е. коды продуктов). После выбора из списка коды продукта автоматически заполняется текстовое поле «Наименование товара». Пользователю остается внести количество продукта – стоимость рассчитывается автоматически. Для расчета стоимости используется ранее созданный макрос ВПР. Еще одна особенность этой формы – дата выбирается с помощью элемента управления «Календарь». Итак, в этой форме использованы такие элементы как Label, TextBox, CommandButton, ComboBox и Календарь. На рисунке показано расположение и количество всех необходимых элементов управления. Процедура для кнопки «Добавить»: Dim i As Integer, j As Single Dim текущая As Object, следующая As Object If TextBox1 = "" Or TextBox2 = "" Then MsgBox ("Введены не все данные!") Exit Sub End If ActiveWorkbook.Sheets("Регистрация заказов").Select Set текущая = ActiveSheet.Range("A6") Do While Not IsEmpty(текущая) Set следующая = текущая.Offset(1, 0) Set текущая = следующая Loop текущая.Value = Calendar1.Value текущая.Offset(0, 1).Value = ComboBox1.Text текущая.Offset(0, 2).Value = TextBox1.Text текущая.Offset(0, 3).Value = TextBox2.Text текущая.Offset(0, 5).FormulaR1C1 = "= VLOOKUP(RC[-4],Ассортимент!R1C1:R35C4,3,FALSE)*RC[-2]" '"=VLOOKUP(RC[-1],Ассортимент!R1C1:R8C3,2,0)" текущая.Offset(0, 4).Value = Calendar1.Value TextBox1.Text = "" TextBox2.Text = "" ComboBox1.Text = ""
Процедура дляComboBox заполняет список. Данные с листа «Ассортимент»: ComboBox1.Clear Sheets("Ассортимент").Select Dim i As Integer, j As Integer i = 2 Do i = i + 1 If Cells(i, 1) = "" Then j = i Exit Do End If Loop For h = 2 To i ComboBox1.AddItem Cells(n, 1) Next n Еще одна процедура для ComboBox, которая позволяет находить наименование продукта в соответствии с выбранным кодом:
ActiveWorkbook.Sheets("Ассортимент").Select Dim i As Integer Dim j As Integer i = 2 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) End If Next n Sheets("Регистрация заказов").Select Процедура для кнопки Отмена – закрывает форму: UserForm6.Hide
|