Використання вбудованих форматів для Format

форматів

Ця книга допоможе освоїти інтегроване середовище розробки VBA та навчитися програмувати у VBA з використання об'єктів, їх властивостей, методів та подій. Обговорювані прийоми програмування ілюструються прикладами, які можна відразу випробувати практично. Отримані знання ви зможете застосувати як для налаштування та вдосконалення популярних офісних програм, включаючи програми Office XP, так і для створення власних програм.

Книга розрахована на тих, хто збирається швидко та без зайвих зусиль навчитися програмувати для Windows, використовуючи VBA.

VBA для чайників

Використання вбудованих форматів для Format

Використання вбудованих форматів для Format

У табл. 11.2 наводяться іменовані вбудовані формати для даних різних типів VBA. Використовуйте їх як аргумент у функції Format. Не забудьте укласти в лапки ім'я обраного вами формату (з першого стовпця таблиці).

Таблиця 11.2. Іменовані формати для використання з функцією Format

Приклад (відповідає встановленню мови української в панелі управління)

Число без виділення розрядів тисяч

Число з виділенням розрядів тисяч та з двома знаками після десяткового роздільника, а також із символом грошової одиниці

Як мінімум один знак зліва та два знаки праворуч від десяткового роздільника (без виділення розрядів тисяч)

Число з виділенням розрядів тисяч і як мінімум один знаком ліворуч і двома знаками праворуч від десяткового роздільника

Число, помножене на 100, з двома знаками праворуч від десяткового роздільника та знаком відсотків (%) праворуч

Число у стандартному вигляді для наукових розрахунків

Ні, якщо значення дорівнює 0, інакше так

Брехня, якщо значення дорівнює0, інакше Істина

Вимк, якщо значення дорівнює 0, інакше Увімк.

Дата та/або час, залежно від значення, представленого відповідно до установок на панелі керування

Дата у вигляді, заданому на панелі керування для повного формату дати

Дата у вигляді, заданому на панелі для середнього формату дати

Дата у вигляді, заданому на панелі керування для короткого формату дати

Час (годинник, хвилина та секунда) у вигляді, заданому в панелі керування для повного формату часу

Час (години та хвилини) у 12-годинному форматі з позначками до/після полудня, заданими в панелі керування

Час (години та хвилини) у 24-годинному форматі

Можна створити власні формати, зібравши їх з символів, що мають спеціальні значення для аргументу формат. Наприклад, щоб відобразити рядки тексту символами верхнього або нижнього регістрів, використовуйте функцію Format з аргументами ">" або "

MsgBox "Зараз" & Format(Now, "h:nn") & _

". Це час " & Iif(Format(Now, "a/p") = "a", _

"до обіду.", "після обіду.")

Якщо ви виконаєте цей програмний код до обіду, оператор відобразить на екрані рядок типу "Зараз 9:07. Це час до обіду". Після обіду ви отримаєте щось схоже повідомлення, показане на рис. 11.1. (До речі, функція MsgBox обговорюється нижче в цьому ж розділі в розділі "Відображення вікон повідомлень".)

Мал. 11.1. Вікно повідомлення

Тепер пояснення. У першій функції формату аргументом формат є "h:nn".

Символ h відповідає стандарту відображення години однією цифрою, коли мається на увазі час до 10:00. Після двокрапки пп задає відображення хвилин з нулем, якщо пройшло менше 10 хвилин після початку години.

Друга з функцій Format, що використовуються, вкладена в функцію Iif. З оглядутого, що аргументом формат у даному випадку є "а/р", значеннями, що повертаються будуть просто або "а", або "р", залежно від того, перевищує час 12 годин дня чи ні. Зазвичай а/р використовується як компонент більш довгого рядка аргументу формату, але в даному випадку результат функції бачити не потрібно, і він обробляється функцією Iif.

Функція Iif – це мініатюрна версія оператора If. Then (обговорюваного у деталях у розділі 32). Синтаксис цієї функції наступний:

Iif (вираз, результатЕсліІстина, результатЕсліБрехня)

У перекладі на "людську" мову функція працює наступним чином: якщо вираз є істина, то функція повертає значення результат Якщо Істина, якщо ж вираз є брехня, то повертається значення результат Якщо Брехня.

У прикладі, що переслідує, виразом для перевірки було

Format(Now, "а/р") = "а"

Тому якщо функція Format повертає значення а, цей вислів є Істина.

Якщо вона повертає будь-яке інше значення, включаючи р, то вираз є Брехня. Потім VBA обчислює результат функції Iif на основі того, чи є значення виразу істиною чи брехнею. Якщо це значення Істина, функція Iif повертає до обіду, а якщо Брехня, то після обіду.

У VBA 6 були додані кілька функцій, подібних до функції Format, - Format Number, Format DateTime, Format Currency і Format Percent - для роботи зданими відповідних типів. Подібно до оригінальної функції Format, кожна з цих функцій-спадкоємиць повертає рядок з форматованим поданням вихідного значення. Зважаючи на те, що ці нові функції за умовчанням повертають результати, потрібні вам найчастіше, ці функції можуть виявитися у використанні зручнішими, ніж сама функція Format. Коротко їх роботу можна описати в такий спосіб.

* FormatNumber(число,ЧислоЗнаківПісля Коми, ВідображатиНезначнийНуль, ВикористовуватиХибкиДля НегативнихЧисел, ГрупуватиРозряди). Повертає значення числа- єдиного обов'язкового аргументу-у вигляді форматованого рядка. Якщо опустити необов'язкові аргументи, функція FormatNumber відформатує число на основі стандартних установок, заданих на вкладці Числа вікна контрольної панелі Мова та стандарти Windows. У припущенні, що мовою Windows обрано українську, ви отримаєте число 132 328,55. Необов'язкові аргументи функції FormatNumber дозволяють змінити задані за замовчуванням значення числа знаків після коми, відображення незначного нуля перед комою для чисел, менших 1, подання негативних чисел у дужках і відділення груп розрядів однієї від іншої (наприклад, пробілами).

* Format DateTime (дата, формат). Конвертує значення дати у форматований рядок. Якщо аргумент не вказано, рядок форматується відповідно до системних установок для короткого формату дати та довгого формату часу, заданих на вкладках Дата та Час панелі керування Мова та стандарти Windows. Тут аргумент формат є числом (а не рядком, як функції Format), але його можна задавати, використовуючи іменовані константи виду vbLongDate або vbShort Time.

* Format Currency (число). Повертає значення числа, відформатованого як грошове, відповідно до поточних установок на панелі керування. В іншому функція Format Currency працює подібно до функції FormatNumber і має ті ж необов'язкові аргументи.

Формат Percent (число). Помножує число на 100 і додає знак відсотків (наприклад, 0,05 перетворюється на 5,00%). Функція Format Percent має самі необов'язкові аргументи, як і функція FormatNumber. Щоб не виводитизнаки дробової частини, задайте аргумент ЧислоЗнаківПісля Комою рівним 0 (наприклад, Format Percent ( .05, 0)).

Як згадувалося в розділі 9, VBA автоматично конвертує дані одних типів в інші "на льоту". Такі автоматичні перетворення, звичайно, зручні, та й результати, що отримуються при цьому, зазвичай відповідають бажаним. Щоправда, при цьому слід обов'язково підкреслити слово зазвичай.

Коли автоматичне перетворення вас не влаштовує, VBA готовий запропонувати безліч функцій для явного перетворення даних одних типів на інші. Ці функції можна використовувати для того, щоб

* бути впевненим, що VBA виконує саме те перетворення, яке потрібне;

* Виконати перетворення, які не виконуються в VBA автоматично;

* Зробити свій програмний код ясніше.

Для конвертування даних у VBA передбачено цілу групу функцій - CBool, Cbyte, CCur і т.д. - своїх кожного з вбудованих типів даних, крім Object. Наприклад, в результаті виконання оператора boolMaybe = CBool ​​(123) змінна bool Maybe міститиме значення True (взагалі будь-яке число, не рівне нулю, в результаті дасть True, напевно тому, що будь-яке таке число асоціюється з чимось існуючим).

Зауважу, однак, що крім перетворення самої операції конвертування в явну, ці функції не роблять нічого такого, що не може запропонувати VBA при автоматичному конвертуванні. (Про особливості функції CDec див. у розділі 9.)

Функції Fix і int відкидають дрібну частину будь-якого заданого ним числа, повертаючи ціле число. Але, на відміну функцій CInt і CLng, де вони виконують звичного округлення - наприклад, int(4 . 98 9) повертає 4, а чи не 5.

Результати цих двох функцій відрізняються лише під час обробки негативних чисел.

Тоді intповертає найближче значення аргументу менше ціле число, a Fix просто відкидає дробову частину аргументу.

Функції Hex і Oct перетворять стандартні десяткові цілі числа рядки, що містять відповідно їх шістнадцяткові і вісімкові еквіваленти.

Деякі функції VBA конвертують числа в рядки. До таких функцій належать такі.

* CStr. Перетворює дані будь-яких типів (крім типу Object ), включаючи числові, у відповідний рядок. Висновок форматується відповідно до установок, заданих у панелі керування Мова та стандарти Windows. Наприклад, у Франції CStr (200.02) на виході видасть рядок "200, 02". Тут слід зауважити, що хоча результуючий рядок і відповідає регіональним установкам, числові дані, що подаються на вхід, повинні бути представлені у форматі, що відповідає англійській мові США.

* Str. Конвертує число в рядок, але завжди форматує рядок відповідно до стандарту англійської мови США з точкою як десятковий роздільник.

* Функції конвертування в числові типи даних. Конвертують рядки у відповідні числові значення, але тільки тоді, коли всі символи у рядку розпізнаються як допустимі для чисел. У цьому випадку теж все залежить від установок панелі керування. Наприклад, в Україні CDbl ("200, 02р. ") в результаті дає 200, 02; у той самий оператор породжує помилку, але CDbl ( " $ 200 . 02 " ) чудово працює.

* Val. Конвертує числа рядків у числові значення, зупиняючись там, де зустрічається перший символ, неприпустимий для чисел. Незалежно від установок панелі керування, розпізнає лише цифри та десяткову точку (а не кому, наприклад). Однак ігнорує пробіли, символи табуляції та переходи на новий рядок.

Так,вираз Val ("28 190.43 12 by 14 ") в результаті дасть 28190,4312.

Chr. Конвертує числовий ANSI-код у відповідний символ. Використовуйте цю функцію, коли в рядок потрібно помістити символ, який не можна надрукувати.

Asc. Приблизно відповідає зворотній функції Chr - повертає числовий код першого символу в рядку.