Самостоятельное задание
Построить приложение, учитывающее движение товара на складе магазина "Все, чего душа пожелает". В диалоговом окне приема товара на склад (рис. У10.9) предусмотреть ввод наименования товара, цену, количество, дату приема и единицу измерения товара. Поступающие товары должны записываться в базу данных рабочего листа Склад.
Рис. У10.9. Диалоговое окно Все, чего душа пожелает. Прием товара.
Единицу измерения товара следует вводить при помощи раскрывающегося списка. Первоначально, в списке задать две единицы измерения: кг и штук. При появлении товара с новой единицей измерения, например литр, первый раз эта единица измерения вводится в раскрывающийся список вручную, после чего программа должна автоматически расширить список используемых единиц измерения, добавив в него введенную величину.
Рис. У10.10. Автоматическое расширение элементов раскрывающегося списка
Предусмотреть в приложении средства поиска товара. При продаже товара записывать информацию о проданном товаре в базу данных, хранящуюся на рабочем листе продано. При списании товара записывать информацию о нем в базу данных, хранящуюся на рабочем листе Списание. Обеспечить программную фильтрацию, сортировку данных и построение обобщающих сводных таблиц как по проданным, так и по списанным и находящимся еще на складе товарам.
Следующая процедура является примером того, как можно автоматически добавлять в раскрывающийся список новые элементы. В диапазон A1:А2 рабочего листа, на основе которого строится раскрывающийся список, введем кг и штук (рис. У10.10). При вводе в поле раскрывающегося списка нового элемента, отличного от предыдущих, и нажатии кнопки CommandButton1, этот элемент программно вводится в ячейку АЗ. Теперь раскрывающийся список автоматически будет строиться по диапазону A1 : АЗ и т. д.
Private Sub CommandButtonl_Click()
Dim Диапазон As String
'
' Диапазон, на основе которого строится поле со списком
'
Dim n, i As Integer
'
' n - число элементов в диапазоне
'
Dim Новый As String
'
' Новый - .элемент, вводимый в поле со списком
n = Application.CountAfRange("A:A"))
Новый = ComboBoxl.Text
'
' Проверка, совпадает ли элемент, вводимый в поле со списком,
' с каким- либо элементом списка. Если не совпадает, то
' он добавляется в конец диапазона, по которому строится список
'
If ComboBoxl.MatchFound = False Then
Cells(n + 1, .1).Value = Новый
Диапазон = "A1:A" & CStr(n + 1)
ComboBox1.RowSource = Диапазон
End If
End Sub
'
Private Sub UserForm_Initialize()
Dim Диапазон As String
Dim n As Integer
n = Application.CountA(Range("A:A"))
Диапазон = "A1:A" & CStr(n)
ComboBoxl.RowSource = Диапазон
UserForml.Show
End Sub