Тверской государственный университет
Опубликован: 13.09.2006 | Доступ: свободный | Студентов: 5133 / 388 | Оценка: 4.23 / 3.83 | Длительность: 28:12:00
Специальности: Программист, Менеджер
Лекция 7:

Создание интерактивных офисных документов в 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". Вот как выглядит интерфейс документа с добавленными кнопками:

Командные кнопки в разделе "Заказы"

увеличить изображение
Рис. 7.8. Командные кнопки в разделе "Заказы"
Ольга Гафарова
Ольга Гафарова

Добрый день. Подскажите формулы при решении задачи на рис. 2.2 в лекции №2. Закон Ома, какие должны использоваться формулы для I и R

Курс: Основы офисного программирования и документы Excel

Серегй Лушников
Серегй Лушников