Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методический комплекс ПЗ СППР 2011.doc
Скачиваний:
27
Добавлен:
16.02.2016
Размер:
1.27 Mб
Скачать

Упражнения по программированию

  1. Откройте новую книгу и создайте в ней два листа Лист1 и Лист2. После этого напишите процедуру, которая состоит из трех строк. Первая строка должна выглядеть какApplication.DisplayAlerts=False. (Ее суть рассматривалась в разделе 4.9.) Вторая строка должна удалять лист Лист2, а третья -лист ЛистЗ. Что неправильно? Внесите в код изменения, чтобы при попытке удаления несуществующего листа ничего не происходило и чтобы не выводилось сообщение об ошибке.

  2. Откройте новую рабочую книгу и добавьте в нее два листа Лист! и Лист2. После этого напишите процедуру из трех строк. Первая строка должна выглядеть какApplication.DisplayAlerts=False. (Ее суть рассматривалась в разделе 4.9) . Вторая строка должна удалить лист Лист2, а третья – лист Лист1. Что опять не так? Проблема заключается в том, что Excel не разрешает удалять последний лист книги. Восстановите лист Лист2 и добавьте соответствующий оператор On Error GoTo и соответствующую метку в пределах процедуры. Код после этой метки должен перехватывать ошибку и выполнять соответствующие действия. Воспользуйтесь окном сообщения для получения кода этой ошибки (код ошибки хранится в свойстве Number встроенного объектаErr).

3.Откройте новую книгу, добавьте в нее модуль и напишите процедуру, которая выполняет следующую последовательность действий.

  • Запросив у пользователя данные, определите расположение и имя файла Excel.

  • Попытайтесь открыть указанный файл.

Запустите эту процедуру и введите имя заведомо существующего файла. Файл должен открыться без проблем. После этого еще раз запустите процедуру и введите имя несуществующего файла. Что произошло? Перепишите процедуру, включив в нее подходящий код обработки ошибок. После модификации процедура должна в любом случае выводить на экран дружественное сообщение.

4.В файлеStateSales.xlsперечислены объемы продаж компании в нескольких штатах. Данные для каждого штата в книге приведены на отдельном листе. В качестве имени листа используется название штата. В книгу добавленмодуль, содержащий процедуруListStates. Эта процедура отображает список всех штатов. К сожалению, процедура имеет несколько ошибок. Найдите и исправьте эти ошибки.

  1. В продолжение предыдущего упражнения — модуль в файле StateSales.xlsсодержит процедурыStateSearchиFindState. ПроцедураState-Searchзапрашивает у пользователя название штата, вызывает процедуруFindStateи отображает сообщение о том, имеет ли указанный штат собственный рабочий лист в рабочей книге. ПроцедураFindStateищет переданный в качестве аргумента штат и возвращает переменнуюFoundтипаBoolean. Если штат найден, то переменная устанавливается в значениеTrue. В противном случае переменная устанавливается в значениеFalse. Эти процедуры также содержат ошибки. Найдите их и исправьте.

  2. Еще раз вернемся к упражнению 4. В книге StateSales.xlsприсутствует процедураCountSales, которая запрашивает у пользователя название штата и имя торгового представителя. После этого подсчитывается объем продаж, которые совершил этот представитель, и выводится окно сообщения с полученным результатом. ОператорOnErrorперехватывает ошибку, когда выбранный штат отсутствует в книге. Легко заметить, что процедура далека от идеала. Выделенные красным цветом строки указывают на присутствие в ней ошибок. Найдите и исправьте все синтаксические и другие типы ошибок.

  3. Еще раз вернемся к упражнению 4. Модуль в книге StateSales.xlsвключает процедуруTotalSalesl, которая запрашивает у пользователя дату. После этого в окне сообщения отображается общий объем продаж по всем штатам до указанной даты (включительно). Дата и сумма должны обозначаться на листе соответствующим форматированием. В этой процедуре также присутствуют ошибки различных типов. Найдите и исправьте их.

  4. В последний раз вернемся к упражнению 4. Модуль в файле StateSales.xlsсодержит процедуруTotalSales2. Кроме того, в книге присутствует пользовательская формаInputsForm. Процедура и пользовательская форма предназначены для предоставления пользователю возможности выбора штата и торгового представителя из списков на пользовательской форме. После этого процедураTotalSales2 рассчитывает общий объем продаж для выбранного представителя в указанном штате. Вычисленная сумма должна выводиться в окне сообщения. Перед отображением пользовательской формы процедураTotalSales2 должна создать массив всех штатов и массив всех торговых представителей (указанных на всех листах). Эти массивы используются для формирования списков на пользовательской форме. Логика работы процедурыTotalSales2 и кода обработки событий сформулирована правильно, но в коде программы присутствует множество мелких ошибок, которые не позволяют программе корректно работать. Найдите и исправьте все ошибки. Как только вы это сделаете и программа заработает правильно, проверьте общий объем продаж (для определенного штата и торгового пред- В ставителя) вручную, чтобы быть уверенным, что программа не совершает про-1 счетов!

9.В файле Shaq.xls содержатся гипотетические данные об успешных штрафных бросках Шакила О'Нила. Для каждой игры указывается количествоштрафных бросков и количество попаданий. После этого количество попаданий делится на количество бросков — так подсчитывается процент атак, завершившихся удачей. К сожалению, если во время игры не было сделано ни одного штрафного броска, возникает ошибка #ДЕЛ/0 !. В данном случае нас интересует метод обнаружения и обработки подобной ситуации в VBA. В этом файле уже содержится процедура DisplayPcts, которая просматривает все ячейки в столбце Процент попаданий и отображает значения в окне сообщения. Запустите процедуру и понаблюдайте, как она аварийно завершит выполнение. Теперь попытайтесь переписать код, чтобы в случае возникновения ошибки на экран выводилось сообщение о невозможности рассчитать процент успешных попаданий, если броски не выполнялись (при этом не должно выводиться сообщение об ошибке). Проанализируйте значения в ячейках столбца D; ячейки в столбце в проверять не нужно. (Подсказка: одно из решений может заключаться в использовании функции VBA isError. Также вы вправе воспользоваться следующим наблюдением. При первом возникновении ошибки можно щелкнуть на кнопке Debug и навести указатель мыши на свойство Value в операторе, при выполнении которого возникла ошибка, имеющая код 2007. Найдите способ использования этого кода. Если вам это удалось, то отправьте мне почтовое сообщение, так как я не смог найти такой способ!)

10.Откройте новую книгу, запустите VBE, добавьте пользовательскую форму, вставьте в нее текстовое поле, которое называется LastNameBox, и разместите рядом подпись Фамилия. Предполагается, что в это текстовое поле будет вводиться фамилия. Таким образом, поле должно принимать только буквы. Проверку правильности введенных данных можно выполнить не только в процедуре OKButton_Click, но и при вводе символов. Для этого воспользуйтесь обработчиком события Change текстового поля. В данном случае процедура обработки события будет называться LastNameBox_Change. Такое событие возникает в тот момент, когда меняется содержимое поля (включая и ситуацию введения нового символа). Напишите соответствующий код обработки события. Процедура должна проверять, является ли последний введенный символ буквой. Если это не так, то процедура должна вывести соответствующее сообщение, активизировать текстовое поле и завершить выполнение. Например, если пользователь введет Smi7, то процедура должна будет распознать, что четвертый символ не представляет букву, и прореагировать соответствующим образом.

Файл CountryForm.xls содержит пользовательскую форму, которая показана на рис. 12. Пользователь может щелкнуть на любом переключателе, который называется USAOpt, CanadaOpt и EuropeOpt. При выборе переключателя подписи и текстовые поля должны получать соответствующие значения. В частности, если установить переключатель США, то верхняя подпись будет содержать текст Штат, а нижняя подпись и нижнее текстовое поле (LangLabel и LangBox) будут скрыты. (Предполагается, что государственным языком в США является английский.) Если пользователь выберет Канада, то подпись и текстовое поле (LangLabel и LangBox) будут скрыты, а верхняя подпись будет содержать текст Провинция. Точно так же, если пользователь выберет Европа, то подпись LocationLabel будет содержать слово Страна. Напишите код обработки события Click, которое возникает при установке переключателя. Проверьте правильность работы приложения, запустив пользовательскую форму.

Рис..12. Пользовательская форма для упражнения 11

Инструктивно-методические указания по проведению практического занятия обсуждены и одобрены на заседании кафедры КЭЭМ

Протокол № ___ от «___» __________ 201__ г.