Оператор присоединения
При заполнении нескольких элементов сразу используется оператор присоединения 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-11-20; просмотров: 591;