Добрый день. Подскажите формулы при решении задачи на рис. 2.2 в лекции №2. Закон Ома, какие должны использоваться формулы для I и R |
Создание интерактивных офисных документов в Excel
Чистка полей
Чтобы закончить рассмотрение вопросов, связанных с приданием интерактивности той части документа, где речь идет о реквизитах заказчика, нам осталось рассмотреть самую простую задачу - чистки соответствующих полей документа. Эта задача является частью более общей задачи чистки всех полей документа, но она может возникать и в процессе работы с разделом "Реквизиты заказчика". Понятно, что с программистской точки зрения особых проблем здесь возникать не может. Тем не менее, приведу текст обработчика события Click командной кнопки "Очистить":
Private Sub CommandButton4_Click() 'Чистка полей бланка с реквизитами заказчика ClearCustomerFields End Sub Public Sub ClearCustomerFields() 'Чистка полей бланка с реквизитами заказчика Dim curField As Range Set curField = Range("D19:J22") curField.ClearContents Set curField = Range("D21") curField = "tel: Email: " End Sub
Единственное, о чем стоит упомянуть, это то, что при чистке сохраняется формат, который следует выдерживать при задании новой информации в поле, отведенном для указания телефона и Email адреса.
Раздел "Сотрудники"
В этом разделе нашего документа будем сохранять информацию о сотруднике офиса, оформляющего заказ. Конечно, проще всего ввести фамилию сотрудника непосредственно в соответствующее поле документа. Но быстрее и методически правильнее выбирать нужные данные из списка фамилий, предоставляемого интерактивным документом. Заполнение этого списка ведется на основе сведений о сотрудниках, хранящихся в базе данных. Вот несколько очевидных преимуществ такого подхода:
- Список, составленный на основе базы данных, позволяет выбирать фамилии только тех сотрудников, которые имеют право на оформление заказа.
- Исчезает возможность намеренно или по ошибке указать фамилию несуществующего сотрудника или сотрудника, не имеющего права на оформление заказа.
Для реализации этого подхода я добавил в документ элемент управления класса Combobox, предназначенный для хранения списка сотрудников. Сразу же скажу еще об одном элементе управления, добавленном мною в документ, - класса Label, метке или надписи, предназначенной для хранения текущей даты. Понятно, что без текущей даты не обходится ни один из документов, и эта дата должна создаваться автоматически, используя соответствующую встроенную функцию Date, возвращающую текущую дату в нужном формате. Конечно в документах, создаваемых на основе Excel, для хранения даты можно использовать любую из ячеек рабочего листа, и я применю этот подход чуть позже при формировании листа печати. Сейчас же хочу продемонстрировать использование различных элементов управления, и потому я предпочел для отображения даты ввести отдельный элемент управления. Взгляните, как выглядит интерфейс этой части документа с добавленными элементами управления:
увеличить изображение
Рис. 7.7. Документ с элементами управления для хранения текущей даты и списка сотрудников
Добавленным элементам управления я дал соответственно имена - AccountDate и ListOfTeam, и установил подходящее форматирование и другие свойства этих элементов. Останавливаться на этих деталях не буду, отмечу только, что для списка свойство Style я установил, равным 0, что запрещает вносить данные в поле ввода списка в момент работы с документом, - разрешен только выбор из заранее сформированного списка.
Главный вопрос при работе с этими элементами, - как и когда задавать текущую дату и формировать список фамилий на основе сведений из базы данных. Вопрос "когда" решается очевидным способом, - разумнее всего инициализацию отдельных элементов документа проводить в момент общей инициализации, то есть в момент открытия документа. На вопрос "как" проще всего ответить, приведя программный код. Поскольку, благодаря принятой стратегии построения обработчиков событий, текст их остается неизменным, то мне достаточно показать дополнения, сделанные в процедуре InitAccount, вызываемой в обработчике события Open нашего документа:
Public Sub InitAccount() 'Установить соединение с базой данных CreateConnection 'Конфигурирование команды ConfigCommand 'Очистить поля бланка ClearFields 'Задать дату и создать список сотрудников CreateListOfTeam End Sub
Сделанные изменения подсвечены, и, как видите, они состоят из вызова процедуры CreateListOfTeam, текст которой сейчас приведу:
Public Sub CreateListOfTeam() 'Задать дату и создать список сотрудников Dim myDate As Object Dim myCombo As ComboBox 'Установить дату Set myDate = ThisWorkbook.Worksheets(1).OLEObjects("AccountDate").Object myDate.Caption = Date 'Создать список сотрудников Set myCombo = ThisWorkbook.Worksheets(1).OLEObjects("ListOfTeam").Object Cmd1.CommandText = "Select [ФИО] From [Сотрудники]" Set Rst1 = Cmd1.Execute With Rst1 .MoveFirst Do While Not .EOF myCombo.AddItem .Fields(0) .MoveNext Loop End With End Sub
Приведу краткие комментарии:
- Оба добавленных в документ элемента управления входят в коллекцию OLEObjects того рабочего листа, на котором расположены элементы. Добраться до них в коллекции можно по данным им именам. Чтобы работать с ними, как с объектами, я создал в процедуре два объекта myDate и myCombo соответствующих классов.
- Дату я установил, задав свойство Caption объекта myDate, вызвав функцию Date в качестве значения этого свойства.
- Формирование списка по информации базы данных рассматривалось уже неоднократно, поэтому ничего принципиально нового нет - формируется текст команды, позволяющий читать данные из таблицы "Сотрудники", команда выполняется и создается набор записей. Обычная схема прохождения по набору записей позволяет сформировать по значениям полей записи элементы списка объекта myCombo. Результаты работы можно видеть на рис. 7.7.
Давайте теперь перейдем к основному разделу нашего документа, связанному с оформлением самого заказа, и покажем, как добавить интерактивность этой части документа.
Раздел "Заказы"
Интерактивность, которую я добавлю в этом разделе документа, должна обеспечить, по крайней мере, решение двух основных задач:
- Сформировать простым и естественным способом заказ на нужные пользователю товары. При этом, естественно, предполагается, что пользователь решает только "творческие" задачи - выбирает товары из списка, задает нужное ему количество товара. Все же вычисления производятся автоматически, и все поля, всюду, где это можно, также заполняются автоматически.
- Сохранить сформированный заказ в базе данных.
Займемся этими задачами. И первое, с чего начнем, добавим в этот раздел документа три инструментальные кнопки с надписями "Сформировать заказ", "Сохранить заказ", "Очистить Заказ" и именами - "FormOrder", "SaveOrder", "ClearOrder". Вот как выглядит интерфейс документа с добавленными кнопками: