52953.fb2 VBA для чайников - читать онлайн бесплатно полную версию книги . Страница 41

VBA для чайников - читать онлайн бесплатно полную версию книги . Страница 41

Dim boolПузо As Boolean

Const Прикрыто As Boolean = True

Const Видно As Boolean = False

If boolПузо = Видно Then

НемногоПощекотать

End If

Вот вам один просто замечательный совет! Чтобы переключить на противоположное значение переменной или свойства объекта типа Boolean, используйте ключевое слово Not. Например, в Word вы можете включить или отключить отображение на экране схемы документа с помощью такой строки программного кода:

ActiveWindow. Docurr.entMap = Not ActiveWindow. DocumentMap

Работа с денежными значениями

Главная цель использования типа данньк Currency (Денежный)- получение точного результата. Хотя типы данных Single и Double с плавающей запятой и могут хранить числа с дробной частью - какими обычно бывают денежные значения - вычисления, выполняемые над числами с плавающей запятой, часто порождают небольшие ошибки, а это заставляет сильно нервничать тех, кто занят подсчетом денежных знаков.

Адаптация к местному формату представления денежных величин

Одна из сильных сторон VBA - это возможность автоматической настройки форматов представления дат и денежных величин в соответствии с местными стандартами. В правильно построенную программу вам не придется включать символы типа S, Г или J - VBA добавит именно тот символ, который нужен, основываясь на выборе языка и страны, которые были сделаны с помощью панели управления Язык и стандарты в Windows.

Рассмотрим, например, следующий фрагмент программного кода:

Const ccurMoneyTalks As Currency = 5463.72

MsgBox format ( ccur MoneyTalks, "Currency")

В результате выполнения этого фрагмента в США в окне сообщения появится

$5,463/72, а та же программа во Франции отобразит 5463, 72F.

Используемая здесь функция Format достаточно подробно рассматривается в главе 31.

Чтобы отобразить содержимое переменной в виде правильно представленного денежного значения, совсем не обязательно объявлять эту переменную переменной типа Currency. Функция Format с именованным форматом

"Currency" замаскирует любое числовое значение под доллары, франки или что-то другое, имеющее хождение в вашем регионе.

Другие возможности использования типа данных Currency

Даже если вы и не собираетесь работать с деньгами, переменные типа Currency будут полезны в следующих случаях:

* хранение больших чисел, выходящих за границы диапазона, допустимого для целых чисел типа Long;

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

Значения типа Currency могут иметь до 19 значащих цифр, из них 15 - до запятой и 4 - после (положение десятичного разделителя фиксировано).

Работа с датами

Тип данных Date используется для удобства при работе со значениями дат и времени. Где-то в своих глубинах VBA кодирует дату и время в виде некоторого числа вроде 35692,9201273148. которое, очевидно, совершенно ничего не говорит большинству простых смертных. К счастью, можно полностью игнорировать это обстоятельство и работать в своих программах с датами и временем точно так же, как вы это делаете на бумаге или в текстовом редакторе.

При этом нужно только помнить, что значения дат и времени- их буквальные значения - необходимо помещать в ограничивающую их пару знаков "решетки'". Например, в следующем фрагменте программного кода сначала объявляются две переменные типа Date, а затем им присваиваются значения:

Dim dateWeddingDay As Date, dateTimeOfCeremony As Date dateWeddingDay = #4/20/99#

dateTimeOfCeremony = #3:15:00 PM#

Как и в случае данных типа Currency. VBA автоматически отображает даты в формате, соответствующем местному стандарту. Например, выражение Format (#10/24 /89#, "Long date") в США порождает строку "Tuesday. October 24, 1989", а в России - "24 Октябрь 1989 г.".

Ввод дат

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

#09/1/1998#

#Sep 25, 93#

#Janua 9 1905

Если редактор Visual Basic распознает введенные вами данные как допустимое значение даты, эти данные будут конвертированы в "краткое представление даты", заданное в соответствующей панели управления Windows. Если вы не укажете год, VBA добавит текущий год за вас. Такое конвертирование происходит сразу же, как только вы переместите текстовый курсор в другую строку, а не откладывается до момента, когда программа начнет выполняться.

Время имеет значение

Буквальные значения времени вводятся в формате #часы:минуты:секунды символ#, где символ - это AM или РМ (означающие до полудня и после полудня соответственно). Например:

#10:45:00 РМ#

#2:3:30 АМ#

Печатать незначащие нули, как в #01:02:03 РМ#, не обязательно, но VBA добавит их за вас, как только вы переместите курсор в другую строку программного кода. Точно так же вы можете опустить ненужные вам элементы в представлении времени, и VBA дополнит ваш ввод. Например, вы можете ввести только секунды, напечатав что-нибудь вроде #0:0:23#, a VBA изменит введенное значение на стандартное представление времени - в данном случае на #12:00:23 АМ#.

Математика дат и времени

Сложение и вычитание дат в рамках обычных арифметических операций в VBA возможны, но, к сожалению, результаты такого сложения и вычитания не соответствуют обычным представлениям о датах. Например, #3/19/2005# - #3/19/2004#н е дает в результате '"1 год", как желательно было бы иметь, а дает #12/3 0/1900#. Такой результат обусловлен спецификой представления значений дат в VBA, но я не собираюсь здесь утомлять вас обсуждением этой специфики. Все, что вам нужно, - это знать о существовании в VBA двух функций, DateAdd ( ) и DateDiff ( ), которые должны полностью удовлетворить ваши потребности в математике дат. Использование этих функций обсуждается в главе 11.

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

Di m date Then A s Date

dateThen = #07:15 AM# + #12:00# ' = #07:15:00 PM#

dateThen = #07:15:00 AM# - #0:15 AM# ' = #07:00:00 AM#

dateThen = #07:15:15 AM# + #0:0:30 AM# ' = #07:15:45 AM#

В этом примере показан минимум того, что можно напечатать. Как всегда, VBA конвертирует введенные данные в полноформатное буквальное значение времени, например #0:0:30 АМ# превратится в #12 : 00 : 30 АМ#. И еще (как показано в представленном примере): если вы хотите получить правильные результаты при использовании арифметических операций со значениями времени, то используемые при этом переменные должны явно объявляться как переменные типа Date.

Информацию - в строку

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

В следующем примере используется сверхпопулярная функция MsgBox, отображающая данные строкового типа в небольшом диалоговом окне. В результате выполнения операторов

Dim dateЭтоНеСтрока As Date

dateЭтоНеСтрока = #17:23:16#

MsgBox dateЭтоНеСтрока