Читаем VBA для чайников полностью

End If

End Sub

Да, я признаю, что используемое здесь условие оказалось довольно длинным, но зато оно работает. Как только оператор If ... Then обнаружит недопустимый символ, отображается сообщение об этом. Затем идет оператор KeyAscii = 0; KeyAscii является аргументом процедуры обработки события KeyPress, поэтому он используется как локальная переменная в данной процедуре. Изменение его значения меняет код символа, передаваемого в текстовое поле. А поскольку само текстовое поле не воспринимает символ, имеющий код 0, напечатанный пользователем недопустимый символ исчезнет без следа.

Изменение значения аргумента KeyAscii позволяет изменять неправильно введенные данные на правильные. Например, следующую процедуру обработки события можно использовать для отображения и сохранения вводимого пользователем текста в виде текста, записанного буквами верхнего регистра:

Private Sub txtSerial Number_KeyPress(ByVal KeyAscii _

As MSForms.ReturnInteger)

KeyAscii = Asc(UCase(Chr(KeyAscii)))

End Sub

Оператор, осуществляющий преобразование, потребовал использования трех функций, вложенных одна в другую. Поскольку KeyAscii является числовым кодом символа, сначала приходится конвертировать этот код в строку с помощью функции Chr, затем перевести строку в верхний регистр с помощью UCase и, наконец, конвертировать строку снова в целое число с помощью Asc.

Если вы хотите перепроверять значение элемента управления при каждом изменении, создайте процедуру обработки события или используйте готовую из предыдущего подраздела. Но иногда предпочтительнее отложить проверку данных до момента, когда пользователь завершит ввод полностью. Некоторые будут признательны вам за возможность без посторонней помощи корректировать вводимые ими данные перед тем, как окончательно передать эти данные на проверку программе, - это они воспринимают как косвенное признание их умственных способностей.

Отложить проверку имеет смысл и в том случае, если она занимает много времени. Если придется сравнивать введенные данные с данными из какой-нибудь базы данных или данными из Internet, вы, наверное, не захотите заставлять пользователя ждать, пока программа будет искать данные для сравнения после каждого нажатия клавиши и каждого щелчка кнопки мыши.

Чтобы проверить значение элемента управления после того, как пользователь закончит ввод полностью, создайте процедуру обработки события BeforeUpDate. Эти события происходят, когда пользователь щелкает на другом элементе управления, нажимает клавишу или нажимает комбинацию клавиш, назначенную другому элементу управления. VBA регистрирует событие BeforeUpDate непосредственно перед тем, как покинуть данный элемент управления, тут вы и можете отменить обновление данных и остаться на месте, предлагая пользователю исправить ошибку. Следующий пример показывает, как использовать оператор Cancel:

Private Sub txtSerial Number_Change()

If Len(t xt Serial Number.Value) > 5 Then

MsgBox "Слишком много символов. Повторите ввод."

Cancel

End If

End Sub

Иногда имеет смысл отложить проверку данных элемента управления до того момента, когда пользователь щелкнет на кнопке ОК, закрывающей форму. Это приходится делать тогда, когда критерии проверки используют значения нескольких элементов управления в форме. Если вы выбрали такой тип проверки, поместите соответствующий программный код в процедуру обработки события Click кнопки ОК. Предположим, вы разрабатываете форму, которая позволит пользователю ввести даты будущих важных событий. В форме есть список, в котором пользователь может указать, за какое время до наступления события нужно напомнить о нем. Если пользователь запланирует некоторую встречу на завтра, но попросит напомнить о ней за два дня до этого, вы можете сообщить о запрете ввода таких данных уже после того, как пользователь щелкнет на кнопке ОК. Таким образом вам не придется просить пользователя ввести данные в элементы управления в определенном порядке, чтобы избежать появления сообщений об ошибке.

Часть V Великолепные десятки

В этой части...

Эта короткая часть, оставленная на десерт, подогревает интерес к УВЛ множеством эффектных примеров. Попробовав представленное здесь, вы непременно захотите еще.

В главе 20 обсуждается ряд тонких приемов программирования, вполне способных заставить "летать " вашу VBA-программу.

Среди рассмотренных тем - запись информации в реестр

Перейти на страницу:

Все книги серии Для чайников

Похожие книги

1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT
C++
C++

С++ – это универсальный язык программирования, задуманный так, чтобы сделать программирование более приятным для серьезного программиста. За исключением второстепенных деталей С++ является надмножеством языка программирования C. Помимо возможностей, которые дает C, С++ предоставляет гибкие и эффективные средства определения новых типов. Используя определения новых типов, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. Программирование с применением таких объектов часто называют объектно-ориентированным. При правильном использовании этот метод дает более короткие, проще понимаемые и легче контролируемые программы. Ключевым понятием С++ является класс. Класс – это тип, определяемый пользователем. Классы обеспечивают сокрытие данных, гарантированную инициализацию данных, неявное преобразование типов для типов, определенных пользователем, динамическое задание типа, контролируемое пользователем управление памятью и механизмы перегрузки операций. С++ предоставляет гораздо лучшие, чем в C, средства выражения модульности программы и проверки типов. В языке есть также усовершенствования, не связанные непосредственно с классами, включающие в себя символические константы, inline-подстановку функций, параметры функции по умолчанию, перегруженные имена функций, операции управления свободной памятью и ссылочный тип. В С++ сохранены возможности языка C по работе с основными объектами аппаратного обеспечения (биты, байты, слова, адреса и т.п.). Это позволяет весьма эффективно реализовывать типы, определяемые пользователем. С++ и его стандартные библиотеки спроектированы так, чтобы обеспечивать переносимость. Имеющаяся на текущий момент реализация языка будет идти в большинстве систем, поддерживающих C. Из С++ программ можно использовать C библиотеки, и с С++ можно использовать большую часть инструментальных средств, поддерживающих программирование на C. Эта книга предназначена главным образом для того, чтобы помочь серьезным программистам изучить язык и применять его в нетривиальных проектах. В ней дано полное описание С++, много примеров и еще больше фрагментов программ.

Бьёрн Страуструп , Бьярн Страустрап , Мюррей Хилл

Программирование, программы, базы данных / Программирование / Книги по IT