Программирование на visual basic
Скачать 1.19 Mb.
|
5.4.4. Форматы даты и время Для вывода даты и времени существуют свои спецификации: : – разделитель компонентов времени. Используется для разделения компонентов времени (часов, минут и секунд). / – разделитель компонентов даты. Используется для разделения ком- понентов даты (дня, месяца и года); d – выводит номер дня, содержащий одну или две цифры (1 – 31); dd – выводит номер дня, содержащий две цифры (01 – 31); ddd – выводит сокращенное название дня недели (Пн– Вс); dddd – выводит полное название дня недели (Понедельник– Воскресенье); ddddd – отображает соответствующую числу полную дату (день, ме- сяц и год) согласно краткому системному формату даты; dddddd – отображает соответствующую числу полную дату (день, ме- сяц и год) согласно длинному системному формату даты; w – выводит номер дня недели (по умолчанию, от 1 — для воскресенья до 7 для субботы). ww – выводит номер недели года (1 – 54); m – выводит номер месяца, содержащий одну или две цифры (1 – 12). Если символ m следует сразу после символов h или hh, выводится число минут; mm – выводит номер месяца, содержащий две цифры (01 – 12). Если символ m следует сразу после символов h или hh, выводится число минут; mmm – выводит сокращенное название месяца (Янв – Дек); 65 mmmm – выводит полное название месяца (Январь – Декабрь); q – выводит номер квартала года (1 – 4); y – выводит номер дня года (1 – 366); yy – выводит номер года, состоящий из двух цифр (00 – 99); yyyy – выводит номер года, состоящий из трех или четырех цифр (100 – 9999); h – выводит число часов, состоящее из одной или двух цифр (0 – 23); hh – выводит число часов, состоящее из двух цифр (00 – 23); n – выводит число минут, состоящее из одной или двух цифр (0 – 59); nn – выводит число минут, состоящее из двух цифр (00 – 59); s – выводит число секунд, состоящее из одной или двух цифр (0 – 59); ss – выводит число секунд, состоящее из двух цифр (00 – 59); ttttt – отображает полное время (часы, минуты и секунды) согласно текущему системному формату времени; AM/PM – использует 12-часовую шкалу, добавляя прописные буквы "AM" (до полудня) или "PM" (между полуднем и полуночью); am/pm – использует 12-часовую шкалу, добавляя строчные буквы "am" (до полудня) или "pm" (между полуднем и полуночью); A/P – использует 12-часовую шкалу, добавляя прописные буквы "A" (до полудня) или "P" (между полуднем и полуночью); a/p – использует 12-часовую шкалу, добавляя строчные буквы "a" (до полудня) или "p" (между полуднем и полуночью). Пример 6. Sub ТестОператораФорматДатаВремя() Dim D As Date D = Now() ' Дата и время в момент вызова функции Debug.Print D; Format(D, "| yy/m/dd"); Format(D, "|| d,d mmmm, _ yyy") Debug.Print Format(D, " hh:nn:ss a/p"); Format(D, "| h:nn:ss AM/PM"); _ Format(D, "|| ttttt") End Sub Результаты вывода данной программы: 02.01.99 13:19:13 | 99.1.02|| 2,2 января, 992 01:19:13 p| 1:19:13 PM|| 13:19:13 5.5. Ввод-вывод в ячейки рабочего листа Часто для отладки программы или получения результатов программы с целью дальнейшей обработки результаты удобнее выводить в ячейки ра- бочего листа электронной таблицы Excel. Для этого используется свойство рабочего листа Cells. Cells — это ячейка рабочего листа. Ячейка рабочего листа имеет две координаты: номер строки и номер столбца. Рабочий лист табличного процессора Excel 97 имеет 65536 строк и 256 столбцов. Кроме того, в любой книге Excel имеется несколько рабочих листов, имеющих 66 свои имена. Поэтому при записи данных при помощи свойства Cells необ- ходимо либо выделить конкретный рабочий лист при помощи свойства ра- бочей книги Sheets, либо при вызове указывать имя рабочего листа. При помощи свойства Cells можно выводить результаты в ячейки рабочего лис- та либо вводить данные с ячеек в оперативную память. Рассмотрим две программы: первая для вывода результатов, а вторая для ввода данных в ячейки рабочего листа. Пример 1. Ввести 10 случайных действительных чисел в диапазоне от 0 до 100 в ячейки рабочего листа Л ИСТ 1. Sub ВводВЯчейки() Const N = 10 Dim a As Single, i As Long Sheets("Лист1").Select ‘ Выделить рабочий лист с именем Лист1 Randomize Timer For i = 1 To N a = Rnd * 100 'Вывод числа a в первый столбец строки i Cells(i, 1) = Format(a, "##0.00") Next i End Sub Пример 2. Найти максимальное значение чисел, находящихся в начале первого столбца. Sub ВводДанныхИзЯчеекРабочегоЛиста() Const N = 10 Dim a As Single, i As Long, max As Single, imax As Long a = -3.4E+38: imax = 0: i = 0 Do ‘ Бесконечный цикл i = i + 1 ‘ Прочитать значение в ячейке рабочего листа Лист1 текущей ‘ книги и присвоить прочитанное значение переменной a a = Worksheets("Лист1").Cells(i, 1) If a = Empty Then Exit Do ‘ Если ячейка пустая, то выйти из цикла If a > max Then ‘ Запомнить максимальное значение и номер строки imax = i: max = a End If Loop ' Если в первом столбце были числа, то напечатать максимальное ' значение этих чисел и номер строки, где оно встретилось ‘первый раз If max > -3.3e38 Then MsgBox (" Максимальное значение = " + _ Str(max) + " в " + Str(imax) + "-той строке") End Sub 67 5.6. Методы форматирования ячеек рабочего листа При выводе результатов работы программ в ячейки рабочего листа, можно применять методы форматирования ячеек. Форматирование приме- няется: 1. Для выделения цветом некоторых ячеек с целью более привлекательной наглядности полученных данных. 2. Для подготовки ячеек рабочего листа к приему очередных данных. 3. Для вывода данных определенного типа. С точки зрения объектно-ориентированного программирования ячейка рабочего листа является объектом. Объекты имеют различные свойства. Для изменения свойств объектов используются различные методы и функ- ции. Для того чтобы узнать какие свойства имеет объект ячейка, необхо- димо в программе ввести ключевое слово Cells и поставить точку. После этого возникает окошко, в котором выводится список свойств данного ме- тода. При помощи мышки, или клавиатуры можно выбрать любое свойство и нажать клавишу Tab или пробел. 5.6.1. Методы выделения ячеек цветом Среди всех многочисленных свойств объекта Cells, рассмотрим свойст- во Interior . Данное свойство определяет способ заполнения ячейки. Это свойство в свою очередь имеет под свойства. Поэтому свойство Interior можно считать подобъектом объекта Cells. Список свойств объекта Interior появляется после набора следующей команды: Cells.Interior. Два свойства объекта Interior: Color и ColorIndex задают цвет заполнения ячейки. Рассмотрим более подробно оба этих свойства. Свойство Color имеет две функции RGB и QBColor Функция RGB возвращает номер цвета для свойства Color. Эта функ- ция имеет три аргумента целого типа: RGB(red, green, blue). Каждый из этих аргументов принимает значения в диапазоне от 0 до 255. Цвет ячейки, точно так же как и цвет точки на экране монитора, фор- мируется при помощи смешивания трех основных (базисных) цветов: красного (red), зеленого (green) и голубого (blue). Смешивая в разных про- порциях эти три базисные цвета можно получить 256 3 = 16777215 различ- ных оттенков. Рассмотрим самые распространенные комбинации базисных цветов для функции RGB. • RGB( 255, 255 ,255 ) ─ белый. • RGB( 192 , 192 , 192 ) ─ светло-серый. • RGB( 128 , 128 , 128 ) ─ серый. • RGB( 64 , 64 , 64 ) ─ темно-серый. • RGB( 0 , 0 , 0 ) ─ черный. • RGB( 255 , 0 , 0 ) ─ красный. 68 • RGB( 255 , 175 , 175 ) ─ розовый. • RGB( 255 , 200 , 0 ) ─ оранжевый. • RGB( 255 , 255 , 0 ) ─ желтый. • RGB( 0 , 255 , 0 ) ─ зеленый. • RGB( 255 , 0 , 255 ) ─ малиновый. • RGB( 0 , 255 , 255 ) ─ циан. • RGB( 0 , 0 , 255 ) ─ синий. Номер цвета можно задать при помощи шестнадцатеричной константы, имеющей шесть цифр: &Hbbggrr. При этом первая пара цифр задает количество голубого цвета, вторая пара ─ количество зеленого цвета и третья пара ─ количество красного цвета в свойстве Color. Каждая пара шестнадцатеричных цифр изменяется в диапазоне от 00 до FF, или от 0 до 255 в десятичном представлении. Например, константа &H123456 задает цвет со значением красного &H12 (18 в десятичном представлении), зеленого &H34 (52 в десятичном представлении) и голубого &H56 (96 в десятичном представлении). Т.е. эта константа соответствует следующему вызову функции RGB(96, 52, 18) или RGB( &H56, &H34, &H12). Замечание. Если номер цвета задается шестнадцатеричной константой имеющей меньше пяти цифр, то она хранится в виде целого числа типа In- teger в дополнительном коде. Поэтому, если первый бит числа в двоичном формате равен единице, то это отрицательное число. Например: &FF00 =- 256. Для таких чисел можно применить нехитрый прием. Вместо отрица- тельной константы &HFF00 типа Integer, используем константу $H1FF00- &10000, имеющую тип Long. Часто пользователю достаточно палитры, состоящей всего лишь из 16 основных цветов. Для этого имеется функция QBColor(color). Эта возвра- щает номер цвета в формате RGB для 16 основных цветов. Единственный аргумент этой функции принимает значение в диапазоне от 0 до 15. Перечислим название цвета при различных значениях параметра color: 0 ─ белый; 1 ─ синий; 2 ─ зеленый; 3 ─ циан; 4 ─ красный; 5 ─ мали- новый; 6 ─ желтый; 7 ─ белый; 8 ─ серый; 9 ─ светло-голубой; 10 ─ свет- ло-серый; 11 ─ светло-зеленый; 12 ─ светло-красный; 13 ─ светло- малиновый; 14 ─ светло-желтый; 15 ─ светло-белый. Кроме того, номера восьми цветов можно задавать при помощи кон- стант. vbBlack 0x0 Черный vbRed 0xFF Красный vbGreen 0xFF00 Зеленый vbYellow 0xFFFF Желтый vbBlue 0xFF0000 Голубой 69 vbMagenta 0xFF00FF Малиновый vbCyan 0xFFFF00 Циан vbWhite 0xFFFFFF Белый Свойства ColorIndex для объекта Interior устанавливает номер цвета в диапазоне от 1 до 56 для цветового заполнения ячейки. Для того чтобы правильно выбрать номер цвета свойства ColorIndex необходимо выделить ключевое слово ColorIndex и нажать клавишу вызова контекстной справки F1. В конце текста, соответствующего справке для этого свойства приве- дена палитра цветов. Рассмотрим примеры программ на цветовое выделение ячеек. Пример 1 . Раскрасить 256 ячеек разными цветами из основной 16-ти цветной палитры. Sub TestColor1() Dim i As Integer, NColor As Integer Sheets("Лист1").Select 'Цикл по 256 ячеек рабочего листа For i = 1 To 256 NColor = (i - 1) Mod 16 ' Номер цвета в диапазоне от 0 до 15 Cells(i, 1) = Hex(QBColor(NColor)) 'Выводим номер цвета в формате RGB ' Заполнить ячейку указанным цветом Cells(i, 1).Interior.Color = QBColor(NColor) Next i End Sub Пример 2. Получить палитру всех возможных расцветок, смешивая три базисных цвета с шагом 16 по числовому значению каждого цвета. Решение: Sub TestColor2() Dim i As Integer, j As Integer, k As Integer, NColor As Long Dim Ri As Integer, Rj As Integer Sheets("Лист2").Select: Cells.Clear ' Форматировать 16 первых столбцов для хранения текстовой ' информации. Данные выводятся в шестнадцатеричном формате ‘ при помощи функции Hex, переводящей десятичное число в ‘ текстовый тип шестнадцатеричного числа Columns("a:P").NumberFormat = "@" For i = 1 To 256 Step 16 ' Количество синего цвета Ri = i \ 16 + 1 'Номер строки для первого блока For j = 1 To 256 Step 16 ' Количество зеленого цвета Rj = j \ 16 + 1 'Номер столбца For k = 1 To 256 Step 16 ' Количество красного цвета ' Формирование номера цвета NColor = 16 ^ 4 * i + 16 ^ 2 * j + k ‘Вывод номера цвета в шестнадцатеричном формате 70 Cells(Ri+k, Rj) = Hex(NColor) Cells(Ri+k, Rj).Interior.Color = NColor ' Заполнение цветом ‘ Второй эквивалентный вариант заполнения цветом ‘ Cells(Ri + k, Rj).Interior.Color = RGB(k, j, i) Next k, j, I ' Автоматический подбор ширины столбцов Columns("A:P").EntireColumn.AutoFit End Sub При помощи данной программы можно подобрать нужный оттенок. 5.6.2. Методы форматирования и очистки ячеек Ячейки рабочего листа, в которых уже находятся или должны быть получены данные, необходимо форматировать. Это можно сделать либо вне программы при помощи различных команд, используя меню Excel, ли- бо при помощи различных методов, примененных к объектам, содержа- щим ячейки рабочего листа. К таким объектам относятся: • WorkSheets ─ рабочий лист. • Range ─ прямоугольная область данных на рабочем листе. • Columns ─ столбец рабочего листа. • Rows ─ строка рабочего листа. • Cells ─ ячейки рабочего листа. К этим объектам можно применять некоторые методы меняющие свойства этих объектов. Основные методы и свойства объекта WorkSheets. В пакете Microsoft Office 2000 поддерживается 17 свойств и методов объектов типа Workshets. Список всех этих свойств и методов автоматиче- ски появляется при наборе имени объекта. Мы рассмотрим некоторые наи- более важные из них. 1. Свойство Count выдает количество объектов находящихся в семействе. В данном случае количество страниц в рабочей книге. 2. Метод Add добавляет рабочий лист в активную книгу. Метод имеет следующий синтаксис: WorkSheets.Add [Before | After ] [, Count] Все параметры являются необязательными. Параметры Before | After применяются, для того чтобы, вставить объект либо перед указанным в параметре Count листом, либо после него. Примеры. Вставить лист перед первым листом: Worksheets.Add Before := Worksheets(1) Команда:= означает ─ присвоить параметру, указанное справа значе- ние. Вставить лист в конец книги: Worksheets.Add After := Worksheets(Worksheets.Count) 71 Вставить лист перед листом с именем Лист6: Worksheets.Add Before := Worksheets("Лист6") Параметр Count задает количество добавляемых листов. По умолчанию добавляется один лист. 3. Метод Select. Этот метод мы уже достаточно часто применяли для перехода на рабо- чий лист. При помощи метода Select производится выделение объектов различных типов. 4. Свойство Name. В этом свойстве хранится имя рабочего листа. Приведем пример программы, в котором все рабочие листы получает значение, равное имени пользователя Excel c добавлением номера листа. Sub testСвойствоИмяЛиста() Dim i As Integer ' Обход по всем рабочим листам открытой книги For i = 1 To Worksheets.Count 'Присвоить свойству Name имена: имя пользователя + ‘номер листа Worksheets(i).Name = Application.UserName + Trim(Str(i)) Next i End Sub На моем персональном компьютере имена листов примут значения: Берков1, Берков2, Берков3 и т.д. 5. Свойство Visible. Данное свойство позволяет сделать лист невидимым или наоборот ви- димым. Worksheets(1).Visible = True ‘ Сделать 1 рабочий лист видимым Worksheets(”Лист1”).Visible = False ‘ Сделать лист невидимым 6. Метод Delete. Данный метод удаляет листы. Worksheets("Лист1").Delete' Удалить рабочий лист с именем Лист1. Основные методы и свойства объекта Range, Cells, Columns и Rows. Все объекты данных типов имеют общие методы и свойства. В Micro- soft Office 2000 количество методов и свойств для объектов указанных типов, более ста. Мы рассмотрим только некоторые. Объектом Range является ячейка или прямоугольник. Объект Range имеет более ста свойств и методов. Range(“B10”) ─ одна ячейка. Range(“A1:D5”) ─ прямоугольник. 1. В свойстве Address хранится диапазон области на рабочем листе. 2. Свойство Formula используется для задания или чтения форму- лы. Например: Range(“B10”).Formula= ”=Sum(“A1:D9”)” В ячейку B10 записать формулу: ”=Sum(“A1:D9”). 72 3. Свойство Value используется для установки или чтения данных. 4. Метод AutoFit используется для автоматической настройки ши- рины столбцов и высоты строк, указанного диапазона. 5. Метод Clear используется для очистки области. Примеры : Cells.Clear ‘ Очистить все ячейки рабочего листа Range("a1:G4").Clear ’ Очистить прямоугольную область A1:G4 Columns("a:b").Clear ‘ Очистить столбцы a и b Rows("2:4").Clear ‘ Очистить строки. Со второй по четвертую 6. Методы ClearComments , ClearContents , ClearFormats и Clear- Notes позволяют очистить область от комментариев, значений, форматов и примечаний. 7. Свойство NumberFormat используется для форматирования объектов. Примеры. ‘ Первую строку отформатировать для хранения времени Rows(1).NumberFormat = "hh:mm:ss" ‘Третий столбец форматируется как денежный. Отрицательные ‘ числа выводятся красным цветом Columns("C").NumberFormat = "$#,##0.00_);[Red]($#,##0.00)" ‘Ячейка A1 ─ общий числовой формат Range("A1").NumberFormat = "General" ‘ Столбцы E, F и G форматируются числовым форматом с двумя ‘ знаками после запятой и с группировкой по три знака в целой ‘ части Columns("E:G").NumberFormat = "# ##0.00" ‘Область D1:K1, вместо формата времени переформатируется ‘ на текстовый формат Columns("D1:K1").NumberFormat = "@" |