Пользовательский тип данных
В практических задачах управления данными чаще приходится работать с наборами элементов совершенно разных типов. В VBA-программе для управления такой информацией лучше всего создать пользовательский тип данных. Огромное число баз данных фактически представляют такого же типа организованную структуру, но в электронном виде. База данных – это набор записей, каждая из которых состоит из полей для хранения отдельных элементов информации. Разные поля могут хранить данные совершенно различных типов (строки, числа, даты или что-то другое). Содержимое одного и того же поля при переходе от записи к записи может меняться, но тип хранимых в поле данных остается во всех записях одним и тем же. Переменную пользовательского типа можно сравнить с отдельной карточкой в каталоге или одной записью в базе данных. Чтобы представить целый каталог с карточками или базу данных с записями, необходимо объявить массив данных пользовательского типа (табл. 8).
Таблица 8
Для объявления пользовательского типа данных используется оператор Type.
Type Имя записи Имя поля As Тип Имя поля As Тип ............. Имя поля As Тип End Type
В следующем примере объявляется тип данных, указанных в табл. 8.
Пример Type Персона Nom As Integer Fam As String Im As String Ad As String Tel As Long Dat As Date End Type
В операторе Type объявляется тип данных одной записи, которая состоит из переменной целого типа, трех строковых значений, длинного целого и даты. Когда переменная типа Персона будет объявлена, то в этой переменной автоматически будет предусмотрено место для всех шести элементов, перечисленных в объявлении типа. Чтобы получить целую базу данных (см. табл. 8), необходимо объявить массив с помощью оператора Dim: Dim T(10) As Персона. После объявления переменной ее можно заполнять и обрабатывать. При работе с элементами записи необходимо указывать имя записи и через точку имя поля.
Пример Персона. Nom = 33 Персона. Fam = "Петров" Персона. Im = "Николай" Персона. Ad = "Химиков 100–128" Персона. Tel = 332681 Персона. Dat = #12.09.99#
Оператор присоединения
При заполнении нескольких элементов сразу используется оператор присоединения With. Он может сократить объем вашей программы. Общий вид оператора присоединения With:
With Имя записи Операторы, в которых присутствуют имена полей End With
Пример With Персона . Nom = 33 . Fam = "Петров" . Im = "Николай" . Ad = "Химиков 100–128" . Tel = 332681 . Dat = #12.09.99# End With
Пример 1 Пусть данные табл. 8 находятся на первом рабочем листе Excel. Прочитать эту таблицу и вывести на печать все данные о Петрове Николае.
Программный код
Option Explicit Type Персона Nom As Integer Fam As String Im As String Ad As String Tel As Long Dat As Date End Type Sub PR25() Dim T(10) As Персона, i As Integer ‘ считывание таблицы For i = 1 To 3 With T(i) ‘ оператор присоединения . Nom = Cells(i, 1) . Fam = Cells(i, 2) . Im = Cells(i, 3) . Ad = Cells(i, 4) . Tel = Cells(i, 5) . Dat = Cells(i, 6) End With Next i ‘ обработка таблицы For i = 1 To 3 With T(i) If . Fam = "Петров" And . Im = "Николай" Then MsgBox (. Nom & " " & . Fam & " " & . Im & " "_ & . Ad & " " & . Tel & " " & . Dat) End If End With Next i End Sub Пример 2 Пусть данные табл. 8 находятся на первом рабочем листе Excel. Прочитать таблицу с листа Excel и отсортировать записи по возрастанию номеров. Полученную таблицу вывести на лист Excel ниже исходной таблицы. В описании переменных добавляются: Dim N, K, As Integer Dim P As Персона Описание и ввод таблицы – как в примере 1.
Основная часть программы
For k = 1 To n – 1 For i = 1 To n – k ‘ сортировка методом “пузырька” If T(i). Nom > T(i + 1). Nom Then P = T(i) T(i) = T(i + 1) T(i + 1) = P End If Next i Next k ‘ распечатка новой таблицы For i = 1 To n With T(i) Cells(i + n + 1, 1) = . Nom Cells(i + n + 1, 2) = . Fam Cells(i + n + 1, 3) = . Im Cells(i + n + 1, 4) = . Ad Cells(i + n + 1, 5) = . Tel Cells(i + n + 1, 6) = . Dat End With Next i End Sub
Добавим в табл. 8 поле “Начисление”, т.е. одна запись будет состоять из следующих полей: Nom, Fam, Im, Ad, Tel, Dat, Nach. Для добавления в запись нового поля следует добавить его в описание записи (раздел Type).
Пример 3 В новой таблице вычислим сумму, начисленную на всех сотрудников .
В описании переменных добавляется: Dim S As Integer В описание записи добавляется поле Nach.
Основная часть программы
S = 0 For i = 1 To N With t(i) S = S + . Nach End With Next i Cells(i+N, 1) = "Итого" Cells(i+N, 7) = S
Пример 4 Задана таблица вкладов клиентов банка, состоящая из следующих полей (табл. 9). Таблица 9
Вычислить сумму, полученную через год каждым клиентом (столбец “Итог”), общую сумму первоначальных вкладов и итоговую сумму всех вкладчиков, а также определить вкладчика с самым большим итоговым вкладом.
Программный код
Option Explicit Type Stroka Nch As Integer Fam As String IO As String PSum As Double Pro As Integer Itog As Double End Type Sub PR26() Dim Klient(100) As Stroka Dim N As Integer Dim i As Integer Dim SP As Double Dim SItog As Double Dim imax As Integer Dim max As Double N = Val(InputBox("Введите количество клиентов")) ‘ Заполнение таблицы For i = 1 To N With Klient(i) . Nch = Cells(i, 1) . Fam = Cells(i, 2) . IO = Cells(i, 3) . PSum = Cells(i, 4) . Pro = Cells(i, 5) . Itog = . PSum + (. PSum * . Pro) / 100 End With Next i Range(Cells(i + N + 1, 1), Cells(100, 100)).Select Selection.Clear Cells(i + N + 1, 1).Select Cells(i + N + 1, 2) = "итоговая таблица" SItog = 0: SP = 0: max = –32000 For i = 1 To N With Klient(i) SP = SP + . PSum SItog = SItog + . Itog If . Itog > max Then max = . Itog imax = i End If Cells(i + N + 2, 1) = .Nch Cells(i + N + 2, 2) = .Fam Cells(i + N + 2, 3) = .IO Cells(i + N + 2, 4) = .PSum Cells(i + N + 2, 5) = .Pro Cells(i + N + 2, 6) = .Itog End With Next i Cells(2 * N + 4, 1) = "итого" Cells(2 * N + 4, 4) = SP Cells(2 * N + 4, 6) = SItog Cells(2 * N + 6, 1) = "maxkl" Cells(2 * N + 6, 2) = Klient(imax).Fam End Sub
Подпрограммы
При написании длинных программ рационально использовать подпрограммы. Подпрограмма – это отдельный блок, который может восприниматься как отдельная программа. В VBA существует два вида подпрограмм: подпрограмма-процедура и подпрограмма-функция.
Популярное: Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (300)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |