Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методика по Информатике / VBA / Усольцева Л.А.- Программир.на VBA.doc
Скачиваний:
110
Добавлен:
10.04.2015
Размер:
1.71 Mб
Скачать

Значение Оператор присоединения

При заполнении нескольких элементов сразу используется оператор присоединения With. Он может сократить объем вашей программы.

Общий вид оператора присоединения With:

With Имя записи

Операторы, в которых присутствуют имена полей

End With

Пример.

With Курсант

. Nom = 15

. Fam = "Петров"

. Im = "Николай"

. Ad = "ОТИИ – 12 курс"

. Tel = 112

. Dat = #12.09.86#

End With

Пример 20.

Пусть данные табл. 6 находятся на первом рабочем листе 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 PR20 ( )

Dim T(10) As Курсант

Dim 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

Пример.

Пусть данные табл. 6 находятся на первом рабочем листе Excel. Прочитать таблицу с листа Excel и отсортировать записи по возрастанию номеров. Полученную таблицу вывести на лист Excel ниже исходной таблицы.

В описании переменных добавляются:

Dim N, K, As Integer

Dim P As Курсант

Описание и ввод таблицы – как в примере 20.

Основная часть программы:

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

Добавим в таблицу 6 поле “Денежное довольствие”, т.е. одна запись будет состоять из следующих полей: Nom, Fam, Im, Ad, Tel, Dat, DenD.

Для добавления в запись нового поля следует добавить его в описание записи (раздел Type).

Пример.

В новой таблице вычислим сумму, начисленную на всех курсантов.

В описании переменных добавляется:

Dim S As Integer

В описание записи добавляется поле DenD.

Основная часть программы:

S = 0

For i = 1 To N

With t(i)

S = S + . DenD

End With

Next i

Cells(i+N, 1) = "Итого"

Cells(i+N, 7) = S

Пример 21.

Задана таблица вкладов клиентов банка, состоящая из следующих полей (табл. 7).

Таблица 7. Данные о клиентах.

№ счета

Фамилия

И.О.

Сумма вклада, руб.

Проценты

Итог

192

Петров

И.С.

10000

10

64

Иванов

К.Т.

5000

8

12

Сидоров

В.А.

25000

10

Вычислить сумму, полученную через год каждым клиентом (столбец “Итог”), общую сумму первоначальных вкладов и итоговую сумму всех вкладчиков, а также определить вкладчика с самым большим итоговым вкладом.

Программный код

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 PR21 ( )

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