Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Пример - разработка бланка заказа







Теперь после того, как мы познакомились с простыми примерами использования VBA, пора перейти к более сложной задаче. Мы должны разработать удобный бланк заказа для обслуживания покупателей в компьютерном салоне. Ваша задача подобрать необходимую конфигурацию компьютера из возможных вариантов по прайсу. Для упрощения ситуации будем считать, что комплектация компьютера состоит максимум из 3 компонентов: системного блока, монитора и принтера. При этом различных системных блоков, мониторов и принтеров много. Эта номенклатура отражается на одном из листов книги – лист с названием Прайс. Вариант этого листа (естественно не в полном объеме) представлен на рис.25. Заметим, что это второй рабочий лист в последовательности листов книги (для того, чтобы последующие строки программы работали без изменений, необходимо сделать также).

 

 

Рис.25.

Здесь столбцы А и В содержат соответственно описание системного блока и его стоимость. Следующие два столбца – название принтера со стоимостью, и далее монитор с ценой. Наша задача – обеспечить на другом рабочем листе (на первом) удобный электронный бланк заказа с использованием информации из прайса. Вид этого бланка представлен на рис. 26.

 

 

Рис. 26.

 

Разберем теперь технические действия для обеспечения рис.26. Расширим столбцы A и B, а затем в ячейку В2 введем текст - Бланк заказа. Обеспечим необходимое форматирование этого текста и далее разместим на рабочем листе элемент надпись. Мы ранее не рассматривали элемент управления надпись, но он достаточно прост и его роль заключается в создании поясняющего текста к какому-либо другому объекту (рис.27).

 

Рис. 27.

 

Поменяйте значения свойств элемента Надпись следующим образом: свойство Caption установим - Заказ №, а свойство BackColor сделайте серым. Далее разместите на листе текстовое окнодля отображения номера заказа. Имя (свойство Name) этого тестового окна можно оставить – TextBox1. Установите также серый фон текстового окна (с помощью свойства BackColor). Далее установите также свойство AutoSize этого окна в значение True. В этом случае ширина текстового поля будет автоматически увеличиваться при вводе символов. Теперь заполните текстом (как показано на рис. 26) содержимое ячеек A5, B5, C5, A7, A8, A9, A12. После этого уберите сетку с экрана (меню Сервис, раздел Параметры и далее следует убрать отметку с отображения сетки). Для прямоугольного диапазона A5 – C14 установите внешние и внутренние границы так, как показано на рис.26. Также установите серую заливку для рассматриваемого диапазона и выберите подложку для листа. Теперь разместите три элемента управления – Поле со списком. Имена этим спискам дайте Spisok1, Spisok2 и Spisok3. Теперь мы подошли к написанию программного кода. Для этого перейдите в редактор VBA. Наша задача заключается в том, чтобы при открытии книги списки автоматически заполнялись содержимым листа – Прайс. Существует процедура Workbook_Open(), которая автоматически выполняется при открытии книги. Эта процедура выполняется над объектом Workbook (текущая рабочая книга). На рис. 28 показано окно редактора кода с заголовком данной процедуры и далее приводится подробное описание с комментариями.

 

Рис. 28.


Private Sub Workbook_Open()

‘Worksheets(1) – первый лист нашей книги, Spisok1 – первый список,

‘Clear – метод, заключающийся в очистке списка.

Worksheets(1).Spisok1.Clear

‘ Далее производится подсчет количества видов системных блоков.

N = 0

While Worksheets(2).Cells(N + 2, 1).Value < > “”

N = N + 1

Wend

N – переменная, в которой мы таким образом подсчитали количество

‘ записей в первом столбце прайса. В качестве условия у нас

‘ используется следующая конструкция

‘ Worksheets(2).Cells(N + 2, 1).Value < > " ".

‘ Здесь Worksheets(2) – второй лист книги и этот лист - Прайс.

Cells (…) – функция выбора ячейки.

‘ В скобках указывается номер строки и номер столбца.

‘ Знак < > обозначает не равно.

‘Далее " " – обозначает, что ячейка пустая. Таким образом в

‘ совокупности эта запись обозначает выполнение цикла, пока

‘ значение в очередной ячейки в списке системных блоков не окажется

‘ пустым.

‘ В итоге мы подсчитали количество непустых ячеек в

‘ списке системных блоков (фактически сколько системных блоков

‘ в прайсе).

For i = 2 To N + 2

Worksheets(1).Spisok1.AddItem Worksheets(2).Cells(i, 1).Value

Next

‘ В записи Worksheets(1).Spisok1 используется список Spisok1 на первом

‘ рабочем листе. Метод AddItem добавляет в список строку. Далее через ‘ пробел записывается строка, которая добавляется, а именно значение

‘ (свойства Value) ячейки (Cells(i, 1)) из листа Worksheets(2).

‘ В следующем фрагменте производится аналогичное заполнение второго

‘ списка.

Worksheets(1).Spisok2.Clear

N = 0

While Worksheets(2).Cells(N + 2, 3).Value < > " "

N = N + 1

Wend

For i = 2 To N + 2

Worksheets(1).Spisok2.AddItem Worksheets(2).Cells(i, 3).Value

Next

‘В следующем фрагменте производится заполнение третьего списка.

Worksheets(1).Spisok3.Clear

N = 0

While Worksheets(2).Cells(N + 2, 5).Value < > " "

N = N + 1

Wend

For i = 2 To N + 2

Worksheets(1).Spisok3.AddItem Worksheets(2).Cells(i, 5).Value

Next

End Sub

 

Таким образом процедура Workbook_Open() обеспечивает заполнение списков данными со второго листа (из прайса). Далее на рис.29 описывается процедура, выполняемая при щелчке по первому полю со списком (когда мы выбираем из списка ту или иную строку).

Рис. 29.

 

На рис.29 строка Range(" c7").Value=Worksheets(2). Cells(Spisok1.ListIndex + 2, 2). Value позволяет заполнить ячейку С7 ценой системного блока. А именно значение ячейки С7 (в ней должна располагаться цена на первом листе) заполняется информацией из прайса. При этом Spisok1.ListIndex – индекс элемента, который выделен щелчком мыши. Щелчки по двум другим спискам приводят к аналогичным действиям (они приводят к заполнению цен монитора и принтера). Эти процедуры приводятся далее.

 

Private Sub Spisok2_Click()

Range(" c8").Value = Worksheets(2).Cells(Spisok2.ListIndex + 2, 4).Value

End Sub

 

Private Sub Spisok3_Click()

Range(" c9").Value = Worksheets(2).Cells(Spisok3.ListIndex + 2, 6).Value

End Sub

Таким образом, в результате мы получили автоматизированное заполнение бланка заказа. Осталось только в ячейку С12 поставить формулу для вычисления суммы: СУММ(C7: C9). Теперь рассмотрим действия при нажатии на кнопку Печать. Наша цель заключается в том, чтобы на 3-м листе создать печатную (автоматически заполняемую) форму. Вид этой формы может иметь примерно следующий вид (рис. 30).

Рис. 30.

Первая задача чисто техническая – обеспечить форматирование листа подобное рис.30. Далее необходимо написать процедуру, выполняемую по щелчку по кнопке Печать. Для этого перейдите в режим конструктора и дважды щелкните по кнопке Печать. В этом случае Вы автоматически попадаете в процедуру, обрабатывающую щелчок по кнопке, и далее проказан текст данной процедуры. В этом тексте, как и ранее, название процедуры – это совокупность имени кнопки (CommandButton1) и действия – щелчок Click.

Private Sub CommandButton1_Click()

Worksheets(3).Cells(10, 2).Value = Worksheets(1).Cells(7, 1).Value + " "

+ Spisok1.Text

‘ На третьем листе будет автоматически формироваться

‘ печатная форма бланка. Ячейка на пересечении 10-й строки

‘ и второго столбца будет содержать информацию о системном

‘ блоке. В эту ячейку записывается информация с первого

‘ листа – о названии системного блока.

Worksheets(3).Cells(10, 3).Value = Worksheets(2).Cells(Spisok1.ListIndex + 2, 2).Value

‘Ячейка на пересечении 10-й строки и третьего столбца

‘ будет содержать информацию о стоимости системного блока.

‘ В эту ячейку записывается информация из

‘ второго листа с учетом выбора из списка.

Worksheets(3).Cells(11, 2).Value = Worksheets(1).Cells(8, 1).Value + " " + Spisok2.Text

Worksheets(3).Cells(11, 3).Value = Worksheets(2).Cells(Spisok2.ListIndex + 2, 4).Value

‘ Ячейка на пересечении 11-й строки и второго столбца будет

‘ содержать информацию о принтере. В эту ячейку записывается

‘ информация с первого листа – название принтера.

‘ Ячейка на пересечении 11-й строки и третьего столбца

‘ будет содержать информацию о стоимости принтера.

‘ В эту ячейку записывается информация из

‘ второго листа, соответствующая выбранному названию из списка.

Worksheets(3).Range(" c3").Value = TextBox1.Text

Worksheets(3).Activate

End Sub

 

В приведенной процедуре не предусматривается заполнения параметров монитора и доработать данную возможность следует самостоятельно.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.