Вычислительная техника и

advertisement
Глава 3.
В этой главе мы рассмотрим несколько практических задач, связанных с
автоматизацией офисной деятельности, которые встретились на практике в
организации, занимающейся поставками крупной строительной техники. Мы
постарались рассмотреть модель, которая лишена ряда ненужных подробностей,
которые скорее отвлекут внимание читателя. Каждая из рассматриваемых далее
разработок представляет отдельную книгу Microsoft Excel, которая позволяет
эффективно сотруднику офиса вести работу.
В плане новых сведений по VBA эта поможет вам на практике познакомиться с
разработкой форм ввода, которые являются неотьемлимым атрибутом любой
разработки. Наверняка, задачи, которые мы далее рассмотрим имеют аналоги и в
деятельности вашей организации.
Организация, применительно к которой, относится рассматриваемая далее
разработка занимается поставками покупателям дорогостоящей строительной
техники. Кроме того, еще один из участков деятельности связан с ремонтом.
Автоматизация заполнения списка заказа в фирме
занимающейся ремонтом
Разрабатываемая далее книга Microsoft Excel будет включать несколько листов
данных и листов управления. Будем считать, что мы располагаем рядом клиентов
(заказчиков), которые обращаются к нам по поводу ремонта их техники. Сам ремонт,
как правило, связан с заменой большого количества деталей. Учитывая это
очевидно, что основные трудности работы персонала связаны с обеспечением
хранения и извлечения необходимой информации по каждому договору с клиентом, а
также с формированием отчетов по клиентам и договорам.
В рабочей книге Microsoft Excel мы разработаем единую информационную базу,
которая позволит существенно облегчить труд сотрудников офиса. Облегчение
работы будет достигнуто за счет программирования необходимых элементов
управления.
Итак, создадим новую рабочую книгу. Ее первый лист, который нам потребуется
создать показан на рис.3.1. В нем размещается справочная информация по нашим
заказчикам (клиентам). Каждая строка на листе Клиенты представляет запись об
одной из наших организаций-партнеров. Обратим внимание на то, что в дальнейшем
при программном обращение к данному листу будет производиться по имени,
поэтому следует присвоить ему имя Клиенты.
Столбец Код предназначен для присвоения каждой фирме уникального кода (для
того, чтобы однозначно идентифицировать каждую фирму). Это исключит
возможные ошибки в случае, если фирмы будут иметь одинаковое название.
Информация представленная в столбцах на рис.3.1 достаточно стандартна –
название, адрес, телефон, факс и ряд финансовых реквизитов.
Рис.3.1.
В верхней части листа располагается кнопка для ввода очередной записи – записи о
новой фирме. Конечно, пользователь, при появлении у нашей фирмы очередного
партнера может внести информацию о нем в очередную свободную строку. Однако
для удобства с одной стороны и контроля возможных ошибок с другой мы
разработаем более удобную технологию. Программная процедура при этом будет
самостоятельно отслеживать появление повторяющихся кодов фирм, а также
непосредственно дублирующих записей об одной и той же фирме.
Во-первых, нам потребуется создать форму ввода, которая приведена на рис.3.2. От
пользователя требуется внести данные в необходимые поля и щелкнуть по кнопке
для фиксации данных на листе Клиенты. Такие действия приведут к тому, что в
очередную свободную строку листа будет внесена информация по новой фирме. При
этом процедура обработки щелчка по кнопке Внести предварительно проверит –
встречался ли уже такой код у фирм? Если да, то ввод будет отменен. Также ввод
будет отменен, если пользователь оставит поле пустым. Кроме того, процедура
посмотрит – не является ли данная запись дублирующей.
Рис.3.2.
Таким образом, наша ближайшая цель – создать форму ввода (рис.3.2) и расположить
на ней необходимые элементы управления. С формами в этом издании мы еще не
сталкивались, поэтому рассмотрим процесс ее создания более подробно.
Для создания пользовательской формы необходимо перейти в окно Microsoft Visual
Basic (рис.3.3). Здесь требуется воспользоваться разделом UserForm в меню Insert.
В результате на экране перед вами появится новая форма, которая фактически
представляет собой контейнер для расположения на ней необходимых элементов
управления.
У формы, как и любого элемента управления, есть свойства. Для того, чтобы открыть
окно свойств следует воспользоваться разделом Properties Window из меню View.
Изменим значение Name на Client, а также значение свойства Caption – Форма
для ввода нового клиента. В результате в заголовке формы будет отражено новый
заголовок.
Далее расположим на форме необходимые элементы управления. Для этого сначала
необходимо отобразить на экране панель инструментов (располагается в правом
нижнем углу на рис.3.3). Вывести эту панель можно с помощью раздела Toolbox в
меню View.
В соответствие с рис.3.2 на форме нам необходимо разместить 7 элементов типа
Надпись и 7 элементов типа Текстовое окно. При этом значения свойства Name для
надписей принципиального значения не имеет, т.к. программно мы обращаться к ним
не будем. Для этих элементов выберите рассматриваемые значения произвольно
(главное, что не было повторяющихся имен). Аналогичное свойство для текстовых
окон нам потребуется, поэтому в таблице 3.1 приведены имена для текстовых окон
которые следует установить.
Рис.3.3.
Подпись
Код
Название фирмы
Адрес
Телефон
Факс
ИНН
КПП
Таблица 3.1. Значения свойства Name для текстовых окон
Name
Cod
Firma
Adress
Tel
Fax
Inn
Kpp
От пользователя требуется внести информацию в текстовые окна, расположенные на
форме, после чего щелкнуть по кнопке Внести. Это приводит к выполнению
процедуры, которая должна предварительно проверить корректность вводимых
данных. Если на листе запись с указанным кодом фирмы уже существует, то
процедура обратит на это внимание. Также процедура обратит внимание, если на
листе уже присутствует фирма с аналогичным названием и с тем же указанным
адресом. Текст этой процедуры приведен на листинге 3.1.
Листинг 3.1. Обработка щелчка по кнопке Внести.
Private Sub CommandButton1_Click()
If Cod.Text = “” Then
MsgBox ("Поле код необходимо заполнить")
Exit Sub
End If
Nom = 0
While Worksheets(“Клиенты”).Cells(Nom + 2, 2).Value <> ""
Nom = Nom + 1
Wend
For i = 1 To Nom
If CStr(Worksheets(“Клиенты”).Cells(i + 1, 2).Value) = _
CStr(Firma.Text) And _
CStr(Worksheets(“Клиенты”).Cells(i + 1, 3).Value) = _
CStr(Adress.Text) Then
MsgBox ("Такая фирма уже присутствует")
Exit Sub
End If
If CStr(Worksheets(“Клиенты”).Cells(i + 1, 1).Value) = _
CStr(Cod.Text) Then
MsgBox ("Такой код фирмы уже встречался")
Exit Sub
End If
Next
Worksheets(“Клиенты”)..Cells(i + 1, 1).Value = Cod.Text
Worksheets(“Клиенты”)..Cells(i + 1, 2).Value = Firma.Text
Worksheets(“Клиенты”).Cells(i + 1, 3).Value = Adress.Text
Worksheets(“Клиенты”).Cells(i + 1, 4).Value = Tel.Text
Worksheets(“Клиенты”).Cells(i + 1, 5).Value = Fax.Text
Worksheets(“Клиенты”).Cells(i + 1, 6).Value = Inn.Text
Worksheets(“Клиенты”).Cells(i + 1, 7).Value = Kpp.Text
MsgBox ("Информация внесена")
Client.Hide
End Sub
Важный момент связан с предпоследней строкой листинга 3.1. Здесь для формы
Client применяется метод Hide, который приводит к закрытию формы.
Разумеется, ее необходимо сначала отобразить и об этом мы еще не говорили. На
листинге 3.2 приведена процедура, которая выполняется по щелчку по кнопке
Внести нового клиента на рис.3.1. Для отображения на экране формы Client
используется метод Show.
Листинг 3.2. Обработка щелчка по кнопке Внести нового клиента.
Private Sub CommandButton1_Click()
Client.Show
End Sub
На рис. 3.4 приведен результат заполнения формы данными о фирме. Теперь
щелчком по кнопке Внести эти данные переносятся на текущий рабочий лист.
Рис.3.4.
Перейдем к разработке еще двух листов. Один из них под названием Номенклатура
показан на рис.3.5. В каждой строке листа располагается название конкретной
запчасти. Поле Номер запчасти позволяет однозначно ее идентифицировать.
Рис.3.5.
Лист Номенклатура является справочным, и не содержит элементов управления.
Технически пользователь просто вручную заполняет этот прайс. Еще один лист,
который также не содержит элементов управления, показан на рис.3.6.
Рис.3.6.
Данный лист содержит информацию о заказах – названиях и их составе. Во-первых, в
столбце А указывается уникальный код для каждого заказа. Далее располагаются
поля для отражения даты заказа и кода фирмы (по коду фирмы легко определить
реквизиты фирмы). Начиная с 5-го столбца размещается информация о запчастях,
которые входят в заказ. Структура этой информации выглядит следующим образом:
в 5-й колонке код запчасти, далее в 6-й количество таких запчастей в заказе, затем в
7-й колонке код другой запчасти и следом количество. Таким образом, в каждой
строке перечислено все содержимое заказа.
Понятно, что вручную заполнять подобную информацию не удобно. Для этого мы
создадим специальный лист с необходимыми элементами управления. В результате
будет обеспечено удобство для пользователя, а также контроль уникальности номера
заказа. Лист, который будет выполнять необходимый функционал показан на рис.3.7.
Рис.3.7.
Рассмотрим теперь техническую работу пользователя с листом Бланк для нового
заказа. Ячейка С1 отводится для названия заказа. Ниже подписи Список запчастей
располагается элемент управления Поле со списком. Щелчком по определенной
запчасти она включается в заказ, который начинается с 11-й строки на данном листе.
Здесь колонки Номер запчасти, Наименование и Цена заполняется исходя из
имеющейся информации на листе Номенклатура. Пользователю следует лишь
внести количество единиц указанной запчасти в списке заказа. Для этого
предназначено текстовое окно с подписью Количество. Далее осталось щелкнуть по
кнопке Включить и в очередную свободную строку на данном листе запишется
строка заказа. После того, как список запчастей заполнен и номер заказа указан
осталось щелкнуть по кнопке Включить в список заказов. Это приведет к переносу
информации о заказе на лист Названия заказов.
Теперь перейдем к рассмотрению процедур, которые обеспечивают выполнение
описанных действий. Когда пользователь переходит на лист Бланк для нового
заказа список запчастей должен быть заполнен. Проще всего это обеспечить с
помощью процедуры выполняемой при активизации листа, которая представлена на
листинге 3.3. Заметим, что в ней предполагается, что значения для свойства Name
выбрано Spk1.
Листинг 3.3. Процедура выполняемая при активизации листа
Private Sub Worksheet_Activate()
Spk1.Clear
N = 0
While Worksheets("Номенклатура").Cells(N + 2, 1).Value <> ""
N = N + 1
Wend
For i = 1 To N
Spk1.AddItem Worksheets("Номенклатура").Cells(i + 1, 1).Value + _
" " + Worksheets("Номенклатура").Cells(i + 1, 2).Value + " " + _
CStr(Worksheets("Номенклатура").Cells(i + 1, 3).Value) + " руб."
Next
End Sub
Процедура заполнения списка запчастей достаточна стандартна и не требует
комментария. Более интересна следующая (листинг 3.4), которая обеспечивает
обработку щелчка по кнопке Включить.
Листинг 3.4. Процедура обработки щелчка по кнопке Включить.
Private Sub CommandButton1_Click()
nom = Spk1.ListIndex
N = 0
While Cells(N + 11, 1).Value <> ""
N = N + 1
Wend
Cells(N + 11, 1) = _
Worksheets("Номенклатура").Cells(Spk1.ListIndex + 2, 1)
Cells(N + 11, 2) = _
Worksheets("Номенклатура").Cells(Spk1.ListIndex + 2, 2)
Cells(N + 11, 3) = _
Worksheets("Номенклатура").Cells(Spk1.ListIndex + 2, 3)
Cells(N + 11, 4) = Col.Text
End Sub
В переменную nom заносится номер элемента, который выделен в списке. Далее
подсчитывается число уже заполненных позиций в заказе – они располагаются
начиная с 11-й строки. Далее в следующую свободную строку заносится очередная
запись.
Теперь на очереди следующая процедура (листинг 3.5), связанная с листом Бланк
для нового заказа, которая переносит информацию с текущего листа на лист
Названия заказов о котом мы уже говорили. В начале процедуры предварительно
проверяется – внесена ли информация в ячейку С1. Далее производится поиск заказа
с указанным на листе номеров. В случае положительного ответа на этот вопрос
процедура возвращает пользователя к работе с листом формирования нового заказа.
В случае уникальности нового номера заказа процедура аккуратно переносит
имеющуюся информацию в каталог заказов. Для формирования даты используется
стандартная функция Date.
Листинг 3.5. Процедура обработки щелчка по кнопке Включить в список заказов.
Private Sub InputSpk_Click()
VerZakaz = CStr(Range("C1").Value)
If VerZakaz = "" Then
MsgBox ("Поле кода заказа необходимо заполнить")
Exit Sub
End If
nom = 0
While Worksheets("Названия заказов").Cells(nom + 2,
nom = nom + 1
Wend
For i = 1 To nom
CodList = Worksheets("Названия заказов").Cells(i +
If CStr(CodList) = VerZakaz Then
MsgBox ("Такой код заказа уже встречался")
Exit Sub
End If
Next
Worksheets("Названия заказов").Cells(N + 2, 1).Value
Range("C3").Value
Worksheets("Названия заказов").Cells(N + 2, 2).Value
NDetal = 0
While Cells(NDetal + 11, 2).Value <> ""
nom = nom + 1
Wend
For i = 1 To nom
Worksheets("Названия заказов").Cells(N + 2, 5 + (i
= Cells(i + 10, 1).Value
Worksheets("Названия заказов").Cells(N + 2, 5 +
1).Value = Cells(i + 10, 4).Value
Next
2).Value <> ""
1, 1).Value
= _
= Date
- 1) * 2).Value
(i - 1) * 2 +
End Sub
Таким образом, мы обеспечили удобный механизм внесения информации. Перейдем
к отчетам. Один из них показан на рис.3.8. Здесь требуется автоматическое
заполнение ячейки листа отводимой для заказчика, а также заполнение адреса,
телефона и факса. Табличная часть на рис.3.8 используется в случае, если число
позиций в заказе не превышает трех. В противном случае данная табличная часть не
заполняется, а создается другой документ Приложение (рис.3.9). Наша задача теперь
– обеспечить данные функциональные особенности.
Рис.3.8.
Рис.3.9.
Для заполнения данных отчетов на листе Названия заказов создадим кнопку
Создать отчет (рис.3.10). По этой кнопке будет открываться форма, где от
пользователя требуется выбрать заказ, по которому требуется напечатать отчет. На
рис.3.11 показана данная форма ввода в окне Visual Basic.
Рис.3.10.
Процедура вызываемая по щелчку по кнопке Создать отчет представлена на листинге
3.6. Ее назначение – открыть форму для формирования отчета.
Листинг 3.6. Процедура обработки щелчка по кнопке Создать отчет.
Private Sub CommandButton1_Click()
Zakaz.Show
End Sub
Рис.3.11.
На листинге 3.7 приведена процедура, которая выполняется при активизации формы.
Ее назначение заключается в заполнении списка (точнее элемента управления – Поле
со списком). Здесь сначала подсчитывается количество заказов уже имеющихся в
базе данных. Информация о том – какая фирма его сделала расположена на листе
Клиенты. Поэтому для заполнения поля со списком мы обращаемся к информации о
клиентах.
Листинг 3.7. Процедура выполняемая при активизации формы
Private Sub UserForm_Activate()
nom = 0
While Worksheets("Названия заказов").Cells(nom + 2, 1).Value <> ""
nom = nom + 1
Wend
Spk1.Clear
For i = 1 To nom
nomfirma = Worksheets("Названия заказов").Cells(i + 1, 3).Value
nfir = 0
While Worksheets("Клиенты").Cells(nfir + 2, 1).Value <> ""
nfir = nfir + 1
Wend
flag = 0
For j = 1 To nfir
If nomfirma = Worksheets("Клиенты").Cells(j + 1, 1).Value Then
Firma = Worksheets("Клиенты").Cells(j + 1, 2).Value
flag = 1
Exit For
End If
Next
If flag = 0 Then
MsgBox "Фирмы с кодом " + CStr(nomfirma) + " нет"
Else
Spk1.AddItem CStr(Worksheets("Названия заказов").Cells(i + 1, _
1).Value) + " " + _
CStr(Worksheets("Названия заказов").Cells(i + 1, 2).Value) + _
" " + _
CStr(Firma)
End If
Next
End Sub
Теперь работа связана с формой представленной на рис.3.12. На Следующая
процедура – обработка щелчка по кнопке Заполнить акт и приложение. На
листинге 3.8 она приведена рассматриваемая процедура, которая обеспечивает
заполнения только листа АКТ.
Рис.3.12.
В зависимости от количества позиций заказа она заполнять или только лист АКТ или
параллельно с актом еще и лист приложение. На листинге приведен первоначальный
вариант, который приводит к заполнению только акта (в случае небольшого
количества заявок).
Листинг 3.8. Процедура обработки щелчка по кнопке Заполнить акт и приложение
Private Sub CommandButton1_Click()
nomzak = Spk1.ListIndex
coldet = 0
While Worksheets("Названия заказов").Cells(nomzak + 2, 5 + coldet *
2).Value <> ""
coldet = coldet + 1
Wend
nprais = 0
While Worksheets("Номенклатура").Cells(nprais + 2, 1).Value <> ""
nprais = nprais + 1
Wend
nfirm = 0
While Worksheets("Клиенты").Cells(nfirm + 2, 1).Value <> ""
nfirm = nfirm + 1
Wend
codfirm = Worksheets("Названия заказов ").Cells(nomzak + 2, _
3).Value
For i = 1 To nfirm
If codfirm = Worksheets("Клиенты ").Cells(i + 1, 1).Value Then
nazv = Worksheets("Клиенты").Cells(i + 1, 2).Value
adr = Worksheets("Клиенты").Cells(i + 1, 3).Value
Tel = Worksheets("Клиенты").Cells(i + 1, 4).Value
Fax = Worksheets("Клиенты").Cells(i + 1, 5).Value
Inn = Worksheets("Клиенты").Cells(i + 1, 6).Value
End If
Next
Worksheets("АКТ").Cells(6, 3).Value = nazv
Worksheets("АКТ").Cells(7, 3).Value = "Адрес:" + adr
Worksheets("АКТ").Cells(8, 3).Value = "Телефон:" + Tel
Worksheets("АКТ").Cells(9, 3).Value = "Факс:" + Fax
If coldet < 4 Then
For i = 1 To coldet
Worksheets("АКТ").Cells(i + 12, 2).Value = _
Worksheets("Названия заказов").Cells(nomzak + 2, _
5 + (i - 1) * 2).Value
For j = 1 To nprais
If CStr(Worksheets("АКТ").Cells(i + 12, 2).Value) = _
CStr(Worksheets("Номенклатура").Cells(j + 1, _
1).Value) Then
nazvanie = CStr(Worksheets("Номенклатура").Cells(j + 1, _
2).Value)
tarif = CStr(Worksheets("Номенклатура").Cells(j + 1, _
3).Value)
Exit For
End If
Next
Worksheets("АКТ ").Cells(i + 12, 3).Value = nazvanie
Worksheets("АКТ").Cells(i + 12, 3).Value = nazvanie
Worksheets("АКТ").Cells(i + 12, 5).Value = _
tarif
Worksheets("АКТ ").Cells(i + 12, 4).Value = _
Worksheets("Названия заказов").Cells(nomzak + 2, _
5 + (i - 1) * 2 + 1).Value
Next
End If
Hide
End Sub
На рис.3.13 приведен заполненный лист АКТ.
Рис.3.13.
Теперь осталось рассмотреть ситуацию, когда в списке число позиций заказа
превышает 3. По ранее сформулированному условию в этом случае требуется
разнести информацию по двум документам – Акт и Приложение. Процедуру
обработки щелка по кпопке мы теперь дополним (листинг 3.9).
Листинг 3.9. Обработка щелчка по кнопке Заполнить акт и приложение
Private Sub CommandButton1_Click()
nomzak = Spk1.ListIndex
coldet = 0
While Worksheets("Названия заказов").Cells(nomzak + 2, 5 + coldet *
2).Value <> ""
coldet = coldet + 1
Wend
nprais = 0
While Worksheets("Номенклатура").Cells(nprais + 2, 1).Value <> ""
nprais = nprais + 1
Wend
nfirm = 0
While Worksheets("Клиенты").Cells(nfirm + 2, 1).Value <> ""
nfirm = nfirm + 1
Wend
codfirm = Worksheets("Названия заказов ").Cells(nomzak + 2, _
3).Value
For i = 1 To nfirm
If codfirm = Worksheets("Клиенты ").Cells(i + 1, 1).Value Then
nazv = Worksheets("Клиенты").Cells(i + 1, 2).Value
adr = Worksheets("Клиенты").Cells(i + 1, 3).Value
Tel = Worksheets("Клиенты").Cells(i + 1, 4).Value
Fax = Worksheets("Клиенты").Cells(i + 1, 5).Value
Inn = Worksheets("Клиенты").Cells(i + 1, 6).Value
End If
Next
Worksheets("АКТ").Cells(6, 3).Value = nazv
Worksheets("АКТ").Cells(7, 3).Value = "Адрес:" + adr
Worksheets("АКТ").Cells(8, 3).Value = "Телефон:" + Tel
Worksheets("АКТ").Cells(9, 3).Value = "Факс:" + Fax
If coldet < 4 Then
For i = 1 To coldet
Worksheets("АКТ").Cells(i + 12, 2).Value = _
Worksheets("Названия заказов").Cells(nomzak + 2, _
5 + (i - 1) * 2).Value
For j = 1 To nprais
If CStr(Worksheets("АКТ").Cells(i + 12, 2).Value) = _
CStr(Worksheets("Номенклатура").Cells(j + 1, _
1).Value) Then
nazvanie = CStr(Worksheets("Номенклатура").Cells(j + 1, _
2).Value)
tarif = CStr(Worksheets("Номенклатура").Cells(j + 1, _
3).Value)
Exit For
End If
Next
Worksheets("АКТ ").Cells(i + 12, 3).Value = nazvanie
Worksheets("АКТ").Cells(i + 12, 3).Value = nazvanie
Worksheets("АКТ").Cells(i + 12, 5).Value = _
tarif
Worksheets("АКТ ").Cells(i + 12, 4).Value = _
Worksheets("Названия заказов").Cells(nomzak + 2, _
5 + (i - 1) * 2 + 1).Value
Next
Else
For i = 1 To coldet
Worksheets("Приложение").Cells(i + 3, 2).Value = _
Worksheets("Названия заказов").Cells(nomzak + 2, _
5 + (i - 1) * 2).Value
For j = 1 To nprais
If CStr(Worksheets("Приложение").Cells(i + 3, 2).Value) = _
CStr(Worksheets("Номенклатура").Cells(j + 1,
1).Value) Then
nazvanie = CStr(Worksheets("Номенклатура").Cells(j + 1, _
2).Value)
tarif = CStr(Worksheets("Номенклатура").Cells(j + 1, _
3).Value)
Exit For
End If
Next
Worksheets("Приложение").Cells(i + 12, 3).Value = nazvanie
Worksheets("Приложение").Cells(i + 12, 3).Value =
Worksheets("Приложение").Cells(i + 12, 5).Value =
Worksheets("Приложение").Cells(i + 12, 4).Value =
Worksheets("Названия заказов").Cells(nomzak + 2,
5 + (i - 1) * 2 + 1).Value
Next
End If
Hide
End Sub
nazvanie
tarif
_
_
Рис.3.14.
Рис.3.15.
Автоматизация учета техники
Продолжим тему связанную с фирмой, которая занимается поставкой и ремонтом
сложной строительной техники. В данном случае на с будет интересовать именно
учет машин. Разработка будет представлять автоматизированную книгу и поэтому
начнем работу с ее создания. На рис.3.16 показан первый лист, который содержит
данные о моделях техники. Код необходим для обеспечения уникальности модели.
Для внесения новой модели мы воспользуемся формой показанной на рис.3.17.
Программно он вызывается с помощью щелчка по кнопке Добавить название
номенклатуры.
Рис.3.16.
Листинг 3.10. Обработка щелчка по кнопке Добавить название номенклатуры
Private Sub CommandButton1_Click()
AddMod.Show
End Sub
Рис.3.17.
Добавление модели производится с помощью процедуры показанной на листинге
3.11. Обработка проверяет уникальность кода и при положительном ответе
информация записывается на лист Модели.
Листинг 3.11. Обработка щелчка по кнопке Добавить модель
Private Sub CommandButton1_Click()
If Cod.Text = "" Then
MsgBox ("Поле код необходимо заполнить")
Exit Sub
End If
If Nazv.Text = "" Then
MsgBox ("Поле названия необходимо заполнить")
Exit Sub
End If
nom = 0
While Worksheets("Модели").Cells(nom + 2, 2).Value <> ""
nom = nom + 1
Wend
For i = 1 To nom
CodList = Worksheets("Модели").Cells(i + 1, 1).Value
If CStr(CodList) = CStr(Cod.Text) Then
MsgBox ("Такой код модели уже встречался")
Exit Sub
End If
Next
Worksheets("Модели").Cells(i + 1, 1).Value = Cod.Text
Worksheets("Модели").Cells(i + 1, 2).Value = Nazv.Text
MsgBox ("Информация внесена")
AddShow.Hide
End Sub
Теперь перейдем к следующему листу (рис.3.18), который будет хранить
информацию о номенклатуре.
Рис.3.18.
Щелчком по кнопке Добавить открывается форма (рис.3.19), которая позволяет добавить в
перечень номенклатуры еще одну позицию. Первая процедура, которая потребуется
выполняется при открытии формы (листинг 3.12).
Листинг 3.12. Процедура выполняемая при активизации формы
Private Sub UserForm_Activate()
nommod = 0
While Worksheets("Модели").Cells(nommod + 2, 1).Value <> ""
nommod = nommod + 1
Wend
Spk1.Clear
For i = 1 To nommod
Spk1.AddItem Worksheets("Модели").Cells(i + 2, 2).Value
Next
End Sub
Таким образом, список моделей заполняется и пользователь, выбрав модель может
внести ее серийный номер.
Листинг 3.13. Процедура внесения очередной записи
Private Sub CommandButton1_Click()
nommod = Spk1.ListIndex
kodmodel = Worksheets("Модели").Cells(nommod + 2, 1).Value
NumberSer = SerN.Text
nprais = 0
While Worksheets("Номенклатура").Cells(nprais + 2, 1).Value <> ""
nprais = nprais + 1
Wend
nmod = 0
While Worksheets("Модели").Cells(nmod + 2, 1).Value <> ""
nmod = nmod + 1
Wend
For i = 1 To nprais
If kodmodel = Worksheets("Номенклатура").Cells(i + 1, 1).Value
And _
NumberSer= Worksheets("Номенклатура").Cells(i + 1,
2).ValueThen
MsgBox
End If
Next
ide
End Sub
Download