- •Федеральное государственное бюджетное образовательное учреждение
- •Оглавление
- •§ 2. Объекты, методы, свойства
- •2.1. Объекты (Objects)
- •2.2. Классы объектов (Classes Objects)
- •2.3. Свойства объекты (Properties)
- •2.4. Методы объекты (Methods)
- •Объект.Метод (арг1, арг2) § 3 Объекты: Application, Range, Selection, Cells, их методы и свойства
- •3.1. Объект Application (приложение)
- •3.1.1. Свойства объекта Application
- •3.1.2. Методы объекта Application
- •3.2. Объект Range
- •3.2.1. Свойства объекта Range
- •Объект. Cells ( номер_строки, номер_столбца).
- •3.2.2. Методы Объекта Range
- •3.3. Объект Selection
- •3.3.1. Свойства Объекта Selection
- •3.3.2. Методы Объекта Selection
- •§ 4 Семейство UserForms, их методы и свойства
- •4.1. Свойства пользовательской формы
- •4.2. Методы пользовательской формы
- •§ 5 Элементы управления
- •5.1. Свойства элементов управления
- •5.2. Label – метка (надпись, статический текст)
- •5.3. TextBox – поле ввода (окно редактирования)
- •5.4. CommandButton – командная кнопка
- •5.5. OptionButton – кнопка-переключатель
- •5.6. ListBox – список
- •5.7. CheckBox – флажок (кнопка выбора)
- •5.8. ScrollBar – полоса прокрутки
- •5.9. Frame – рамка (группы)
- •§ 6 Создание пользовательских форм
- •Лабораторный практикум № 1. Заполнение ListBox.
- •1. Заполнение объектов ListBox, расположенных на одном объекте UserForm.
- •Программа Заполнение объектов ListBox, расположенных на одном объекте UserForm.
- •2. Заполнение объектов ListBox, расположенных на разных объектах UserForm.
- •2.1 Заполнение списка поэлементно, если список состоит из одной колонки
- •2.2 Заполнение списка массивом, если список состоит из одной колонки
- •2.3 Заполнение списка из диапазона, в который предварительно введены элементы списка
- •2.4 Заполнение списка поэлементно, если список состоит из нескольких колонок
- •2.5 Заполнение списка массивом, если список состоит из нескольких колонок
- •3. Заполнение объектов ListBox, расположенных на листе Excel
- •Программа Заполнение объектов ListBox, расположенных на листе Excel
- •Лекция 2. Виды алгоритмов. Операторы цикла
- •§ 1. Алгоритмы последовательные, разветвляющиеся и циклические с заданным числом итераций и с неизвестным числом итераций
- •1.1. Алгоритмы линейной структуры
- •1.2. Алгоритмы разветвляющейся структуры
- •If [условие] Then
- •1.3. Алгоритмы циклической структуры
- •§ 2. Операторы цикла в Excel и vba
- •2.1. Операторы цикла vba
- •Операторы
- •Операторы
- •Do While [условие] операторы
- •Операторы
- •2.3. Выход из структур управления
- •2.4. Оператор цикла с предусловием While…Do
- •While Условие Do Оператор.
- •2.5. Оператор цикла с постусловием Repeat…Until
- •2.3 Оператор цикла с параметром for
- •2.4 Оператор цикла с параметром With
- •Лабораторный практикум № 2. Табулирование функции
- •Программа табулирование разветвляющейся функции вVва
- •Функции, разветвляющейся больше, чем один раз
- •Программа табулирования двух функций вVва
- •2. Табулирование функции
- •2.1 Программа табулирования функции в vва
- •4. Табулирование функций в объектах ListBox
- •2.2 Программа Табулирование функций в объекте ListBox
- •Лекция 3. Файлы
- •Чтение из файла.
- •Чтение из файла
- •Лабораторный практикум № 3.
- •Часть 1
- •Часть 2
- •Часть 3
- •Лекция 4. Массивы
- •Лабораторный практикум № 4
- •Лекция 5. Графика
- •Ксения Владимировна Григорьева Информатика Введение в объектно-ориентированное программирование
2.4 Оператор цикла с параметром With
В операциях над записями оператор with удобно использовать для краткого обращения к полям записи. В операторе with к полям одной или более конкретных переменных типа запись можно обращаться, используя только идентификаторы полей. Оперaтор with имеет следующий синтаксис:
Возьмем следующее описание:
type
TDate = record
Day : Integer:
Month : Integer;
Year : Integer: end;
var OrderDate: TDate;
С учетом данного описания приведем пример оператора with:
with OrderDate do
if Month = 12 then
begin
Month := 1;
Year := Year + 1 end else
Month := Month + 1;
Это эквивалентно следующему:
if OrderDate.Month = 12 then
begin
OrderDate.Month := 1;
OrderDate.Year := TDate.Year + 1 end
Else
Date.month := TDate.Month + 1;
В операторе with сначала производится проверка каждой ссылки на переменную, а именно: можно ли ее интерпретировать, как поле записи. Если это так, то она всегда интерпретируется именно таким образом, даже если имеется доступ к переменной с тем же именем.
Допустим описаны следующие переменные:
type
TPoint = record
x,y: Integer;
end;
var
x: Point;
y: Integer;
В этом случае и к x, и к y можно обращаться, как к переменной или как к полю записи. В операторе:
with x do
begin
x := 10;
y := 25;
end;
x между ключевыми словами with и dо относится к переменной типа
указатель, а в составном операторе x и y ссылаются на x.x и y.y.
Оператор:
with V1,V2,...Vn do s;
эквивалентен операторам:
with V1 do
with V2 do
...
with Vn do
S;
В обоих случаях, если Vn является полем и v1, и v2, то она интерпретируется как v2.Vn, а не как v1.Vn.
Если выборка переменной типа запись связана с индексированием массива или разыменованием указателя, то эти действия производятся до того, как будет выполняться составной оператор.
Лабораторный практикум № 2. Табулирование функции
Выполнение лабораторной работы “Табулирование функции” состоит из двух частей:
– табулирование функции в Excel;
– табулирование функции в VBA.
Критерием правильности является совпадение полученных таблиц, рис. 1..
Целью лабораторной работы “Операторы цикла” является освоение грамматических конструкций VBA, обеспечивающих эффективную организацию циклических процессов.
Лабораторная работа “Операторы цикла” выполняется в среде VBA.
При этом одна и та же разветвляющаяся функция g(x) табулируется на листе Excel семь раз с использованием семи различных конструкций операторов цикла:
– Do While … loop ;
– Do Loop … while ;
– Do Until … loop ;
– Do Loop … until ;
– While … wend ;
– For … next ;
– For Each … next .
Рис. 1.
– В программах используется специально созданная пользовательская функция g(x);
Процесс создания функции пользователя следующий:
– находясь в Excel, включить редактор VBA, нажав ALT-F11;
– включить режим вставки – insert;
– выбрать – Module;
– в появившемся окне написать текст модуля, соответствующий программируемой функции –
Function g(x)
If x <= 0 Then g = Sin(x) Else g = Exp(-x)
End Function
– нажать пиктограмму – Run Sub/UserForm;
– в появившемся окне Macros щелкнуть по клавише Cancel, что обеспечивает внесение функции g(x) в библиотеку модулей мастера функций fx; с этого момента функция g(x) доступна всем пользователям мастера функций fx в разделах “Полный алфавитный перечень” либо “Определенные пользователем”;
ИМЕНА ПОЛЬЗОВАТЕЛЬСКИХ ФУНКЦИЙ НЕ ДОЛЖНЫ СОВПАДАТЬ С АДРЕСАМИ ЯЧЕЕК ТАБЛИЦЫ EXCEL.
– В программах используется функция Format(x, "0.0#"), которая обеспечивает вывод указанной переменной, в данном случае X, в заданном формате "0.0#", в данном случае, один разряд до десятичной точки, два – после;
– В модуле с оператором For Each … next используется динамическое объявление массивов
Dim x() As Double
Dim y() As Double
с последующим уточнением мерности массивов
ReDim x((xk - xn) / xd)
ReDim y((xk - xn) / xd), которое может размещаться в любом месте программы;
– Так как оператор цикла For Each … next может оперировать только с элементами одного множества, то для вывода спектров значений аргумента X и функции g(x) используются два разных оператора
For Each n In x
…
Next n
и
For Each n In y
…
Next n.
Программы табулирования разветвляющейся функции в Excel с использованием операторов цикла
Private Sub CommandButton1_Click()
Dim i As Integer
Dim j As Integer
Dim x As Double
Dim w As String
w = InputBox("w =", "очистить диапазон? - (Y,y,Д,д)/N")
If (w = "Y") Or (w = "y") Or (w = "Д") Or (w = "д") Then Range(Cells(7, 1), Cells(28, 3)) = Clear
xn = InputBox("xn =", "Введите начало диапазона", -3)
xk = InputBox("xk =", "Введите конец диапазона", 7)
xd = InputBox("xd =", "Введите шаг изменения переменной", 0.5)
i = InputBox("i =", "Введите начало таблицы, строку", 7)
j = InputBox("j =", "Введите начало таблицы, столбец", 1)
Cells(i, j) = "X": Cells(i, j + 1) = "G1": Cells(i, j + 2) = "G2"
i = i + 1
x = xn
Do While x <= xk
Cells(i, j) = Format(x, "0.0#")
If x <= 0 Then
Cells(i, j + 1) = Format(g(x), "#0.0###")
Else
Cells(i, j + 2) = Format(g(x), "#0.0###")
End If
x = x + xd: i = i + 1
Loop
End Sub
Private Sub CommandButton2_Click()
Dim i As Integer
Dim j As Integer
Dim x As Double
w = InputBox("w =", "очистить диапазон? - (Y,y,Д,д)/N")
If (w = "Y") Or (w = "y") Or (w = "Д") Or (w = "д") Then Range(Cells(7, 4), Cells(28, 6)) = Clear
xn = InputBox("xn =", "Введите начало диапазона", -3)
xk = InputBox("xk =", "Введите конец диапазона", 7)
xd = InputBox("xd =", "Введите шаг изменения переменной", 0.5)
i = InputBox("i =", "Введите начало таблицы, строку", 7)
j = InputBox("j =", "Введите начало таблицы, столбец", 4)
Cells(i, j) = "X": Cells(i, j + 1) = "G1": Cells(i, j + 2) = "G2"
i = i + 1
x = xn
Do
Cells(i, j) = Format(x, "0.0#")
If x <= 0 Then
Cells(i, j + 1) = Format(g(x), "#0.0###")
Else
Cells(i, j + 2) = Format(g(x), "#0.0###")
End If
x = x + xd: i = i + 1
Loop While x <= xk
End Sub
Private Sub CommandButton3_Click()
Dim i As Integer
Dim j As Integer
Dim x As Double
Dim w As String
w = InputBox("w =", "очистить диапазон? - (Y,y,Д,д)/N")
If (w = "Y") Or (w = "y") Or (w = "Д") Or (w = "д") Then Range(Cells(7, 7), Cells(28, 9)) = Clear
w = InputBox("w =", "очистить диапазон? - Y/N")
If w = "Y" Then Range(Columns(1), Rows(15)) = Clear
xn = InputBox("xn =", "Введите начало диапазона", -3)
xk = InputBox("xk =", "Введите конец диапазона", 7)
xd = InputBox("xd =", "Введите шаг изменения переменной", 0.5)
i = InputBox("i =", "Введите начало таблицы, строку", 7)
j = InputBox("j =", "Введите начало таблицы, столбец", 7)
Cells(i, j) = "X": Cells(i, j + 1) = "G1": Cells(i, j + 2) = "G2"
i = i + 1
x = xn
Do Until x > xk
Cells(i, j) = Format(x, "0.0#")
If x <= 0 Then
Cells(i, j + 1) = Format(g(x), "#0.0###")
Else
Cells(i, j + 2) = Format(g(x), "#0.0###")
End If
x = x + xd: i = i + 1
Loop
End Sub
Private Sub CommandButton4_Click()
Dim i As Integer
Dim j As Integer
Dim x As Double
Dim w As String
w = InputBox("w =", "очистить диапазон? - (Y,y,Д,д)/N")
If (w = "Y") Or (w = "y") Or (w = "Д") Or (w = "д") Then Range(Cells(7, 10), Cells(28, 12)) = Clear
xn = InputBox("xn =", "Введите начало диапазона", -3)
xk = InputBox("xk =", "Введите конец диапазона", 7)
xd = InputBox("xd =", "Введите шаг изменения переменной", 0.5)
i = InputBox("i =", "Введите начало таблицы, строку", 7)
j = InputBox("j =", "Введите начало таблицы, столбец", 10)
Cells(i, j) = "X": Cells(i, j + 1) = "G1": Cells(i, j + 2) = "G2"
i = i + 1
x = xn
Do
Cells(i, j) = Format(x, "0.0#")
If x <= 0 Then
Cells(i, j + 1) = Format(g(x), "#0.0###")
Else
Cells(i, j + 2) = Format(g(x), "#0.0###")
End If
x = x + xd: i = i + 1
Loop Until x > xk
End Sub
Private Sub CommandButton5_Click()
Dim i As Integer
Dim j As Integer
Dim x As Double
Dim w As String
w = InputBox("w =", "очистить диапазон? - (Y,y,Д,д)/N")
If (w = "Y") Or (w = "y") Or (w = "Д") Or (w = "д") Then Range(Cells(7, 13), Cells(28, 15)) = Clear
xn = InputBox("xn =", "Введите начало диапазона", -3)
xk = InputBox("xk =", "Введите конец диапазона", 7)
xd = InputBox("xd =", "Введите шаг изменения переменной", 0.5)
i = InputBox("i =", "Введите начало таблицы, строку", 7)
j = InputBox("j =", "Введите начало таблицы, столбец", 13)
Cells(i, j) = "X": Cells(i, j + 1) = "G1": Cells(i, j + 2) = "G2"
i = i + 1
x = xn
While x <= xk
Cells(i, j) = Format(x, "0.0#")
If x <= 0 Then
Cells(i, j + 1) = Format(g(x), "#0.0###")
Else
Cells(i, j + 2) = Format(g(x), "#0.0###")
End If
x = x + xd: i = i + 1
Wend
End Sub
Private Sub CommandButton6_Click()
Dim i As Integer
Dim j As Integer
Dim x As Double
Dim w As String
w = InputBox("w =", "очистить диапазон? - (Y,y,Д,д)/N")
If (w = "Y") Or (w = "y") Or (w = "Д") Or (w = "д") Then Range(Cells(7, 16), Cells(28, 18)) = Clear
xn = InputBox("xn =", "Введите начало диапазона", -3)
xk = InputBox("xk =", "Введите конец диапазона", 7)
xd = InputBox("xd =", "Введите шаг изменения переменной", 0.5)
i = InputBox("i =", "Введите начало таблицы, строку", 7)
j = InputBox("j =", "Введите начало таблицы, столбец", 16)
Cells(i, j) = "X": Cells(i, j + 1) = "G1": Cells(i, j + 2) = "G2"
i = i + 1
For x = xn To xk Step xd
Cells(i, j) = Format(x, "0.0#")
If x <= 0 Then
Cells(i, j + 1) = Format(g(x), "#0.0###")
Else
Cells(i, j + 2) = Format(g(x), "#0.0###")
End If
i = i + 1
Next x
End Sub
Private Sub CommandButton7_Click()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim x() As Double
Dim y() As Double
Dim w As String
w = InputBox("w =", "очистить диапазон? - (Y,y,Д,д)/N")
If (w = "Y") Or (w = "y") Or (w = "Д") Or (w = "д") Then Range(Cells(7, 19), Cells(28, 21)) = Clear
‘If w = "Y" Then Range(Columns(1), Rows(19)) = Clear
xn = InputBox("xn =", "Введите начало диапазона", -3)
xk = InputBox("xk =", "Введите конец диапазона", 7)
xd = InputBox("xd =", "Введите шаг изменения переменной", 0.5)
i = InputBox("i =", "Введите начало таблицы, строку", 7)
j = InputBox("j =", "Введите начало таблицы, столбец", 19)
Cells(i, j) = "X": Cells(i, j + 1) = "G1": Cells(i, j + 2) = "G2"
i = i + 1
i0 = i
ReDim x((xk - xn) / xd)
ReDim y((xk - xn) / xd)
For k = 0 To (xk - xn) / xd
x(k) = xn + k * xd
y(k) = g(x(k))
Next k
For Each n In x
Cells(i, j) = Format(n, "0.0#")
i = i + 1
Next n
i = i0
k = 0
For Each n In y
If x(k) <= 0 Then Cells(i, j + 1) = Format(n, "#0.0###") Else Cells(i, j + 2) = Format(n, "#0.0###")
i = i + 1
k = k + 1
Next n
End Sub
Private Sub CommandButton1_Click()
Dim i As Integer
Dim j As Integer
Dim x As Single
Dim xn As Single
Dim xk As Single
Dim dx As Single
Xn=InputBox(“Xn=”,”Ввод начального значения X”,-2, 8000, 2000)
Xk=InputBox(“Xk=”,”Ввод конечного значения X”, 3, 800,1000)
Dx=Input(“dX=”,”Ввод значения шага X”, 0.5, 8000, 2000)
I=InputBox(“i=”,”Ввод начала таблицы, строка i”, 1, 8000, 1000)
J=InputBox(“j=”,”Ввод начала, столбец j”, 1, 8000, 2000)
X=xn: Cells(i, j)=”X”: Cells(i, j+1)=”Y”
10 y=x^2
Cells(i+1, j)=x
Cells(i+1, j+1)=y
x=x+dx
i=i+1
If x>xk Then GoTo 20 Else GoTo 10
20 End Sub
Некоторые комментарии к программе:
– Объявление простых переменных, строго говоря, в VBA не требуется, но бывают случаи, когда именно из-за этого программа работает не правильно или не работает вообще;
– В операторе InputBox используются пять параметров, первые два – символьные константы, их использование объясняется при появлении окна InputBox, третий параметр – предлагаемое значение, которое можно изменить, четвертый и пятый параметры – координаты левого верхнего угла окна InputBox на экране;
– Конечно, можно написать более совершенную программу, исключающую применение условного оператора и тем более операторов перехода, применив один из операторов цикла, но предполагается, что на данном этапе студенты еще не знакомы с разновидностями операторов цикла и поэтому главным критерием качества программного продукта является решение поставленной задачи;