Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Му макросы и VBA

.pdf
Скачиваний:
11
Добавлен:
15.03.2016
Размер:
234.79 Кб
Скачать

11

события Click, и действия, выполняемые процедурой, будут

осуществляться при нажатии данной кнопки на форме при ее запуске на выполнение.

Практическое задание 8:

в редакторе выполните команду Insert/UserForm. Появится форма, которая напоминает диалоговое окно. Она имеет строку заголовка UserForm1 и кнопку закрытия окна. В окне свойств, просмотрите свойства.

Перейдите на свойство Caption и введите - МояФорма. Заголовок формы изменится. Т.о. меняя свойства формы, мы меняем ее внешний вид и поведение (и наоборот). В большинстве случаев меняется только несколько свойств (остальные не носят существенный характер). Для получения справки по некоторому свойству, необходимо на него установить курсор и нажать клавишу F1.

Свойство BackColor позволяет выбрать цвет фона, свойства BorderColor и BorderStile соответственно задают цвет и тип границы формы, свойство ForeColor задает цвет текста на форме, измените значения этих свойств. А

так же задайте свойства height – 100, width – 300.

Через меню View/ToolBox вызовите панель элементов для формы. Выберите элемент Label, перенесите его на форму и введите текст Добро пожаловать! Перейдите на свойство Font и задайте полужирный, 10. Выполните команду из меню Run Sub/UserForm. На листе Excel отразится созданная форма. Закройте созданную форму, произойдет автоматический возврат в IDE (интегрированную среду). Перейдите на свойство Name (когда активна форма) и введите MyForm1 – это самое важное свойство, так как оно определяет имя, по которому Visual Basic опознает объект во время выполнения программы.

Если в диалоговое окно добавлено несколько управляющих элементов, то для перемещения между ними (при выполнении программы) с помощью клавиши Tab можно установить последовательность перехода между элементами.

Практическое задание 9:

добавьте на форму четыре кнопки. В меню View выберите команду TabOrder и установите в какой последовательности будут перебираться элементы окна. Выполните команду Run. Нажимайте клавишу Tab и следите за диалоговым окном. Закройте форму.

Для каждой кнопки можно задать подходящую надпись, а так же для каждого элемента (кнопки) задается имя, по которому происходит обращение к этому элементу в программе.

12

Практическое задание 10:

Расположите удобно четыре созданные кнопки на форме. Задайте для них следующие подписи: Форматирование, Задание значений, Проверка типа данных и ОК. Задайте подходящие свойства для каждой кнопки: размер кнопки, цвет, шрифт, размер шрифта и другие. Выполните команду Run. Просмотрите результат. Закройте форму.

Для каждой кнопки можно задать комментирующую подпись, которая всплывает, когда к кнопке приближается курсор мыши при выполнении программы. Так же для активизации кнопки можно задать горячие клавиши, это позволит обращаться (переводить фокус) к нужной кнопке при нажатии клавиш Alt+акселератор (акселератор выбранная буква).

Практическое задание 11:

переходите последовательно от кнопки к кнопке и задавайте для каждой в окне свойства Accelerator букву, для кнопки Задание значений з, для кнопки Форматирование т, для Проверка типа данных в, для ОК о. Выполните команду Run. Нажимайте поочередно клавиши Alt+з, Alt+т, Alt+в Alt+о. Будет происходить перемещение на нужную кнопку. Закройте окно.

Таким образом, проделана подготовительная работа, т.е. оформлен внешний вид окна. Теперь необходимо для каждой кнопки написать процедуру обработки события, а именно, процедуру обработки нажатия кнопки.

Практическое задание 12:

перейдите на пустой лист в Excel и переименуйте его Задание. Затем заполните ячейки A1:D10.Содержимое ячеек выглядит следующим образом:

в виде формул:

или

в виде значений:

0

1

2

3

0,01

0,02

-0,03

-0,04

текст

ТЕКСТ

Пример

ПРИМЕР

=A1>1

=B1>1

=C1>1

=D1>1

=A1<1

=B1<1

=C1<1

=D1<1

=K1/0

=L1/0

=M1/0

=N1/0

=ж1*2

=ж1*2

=ж1*2

=ж1*2

36892

36893

36894

36895

36893

36894

36895

36896

36894

36895

36896

36897

0

1

2

3

0,01

0,02

-0,03

-0,04

текст

ТЕКСТ

пример

ПРИМЕР

ЛОЖЬ

ЛОЖЬ

ИСТИНА

ИСТИНА

ИСТИНА

ЛОЖЬ

ЛОЖЬ

ЛОЖЬ

#ДЕЛ/0!

#ДЕЛ/0!

#ДЕЛ/0!

#ДЕЛ/0!

#ИМЯ?

#ИМЯ?

#ИМЯ?

#ИМЯ?

01.01.2001

02.01.2001

03.01.2001

04.01.2001

02.01.2001

03.01.2001

04.01.2001

05.01.2001

03.01.2001

04.01.2001

05.01.2001

04.01.2001

Практическое задание 13:

напишем процедуру обработки для кнопки Задание значений. В

редакторе двойным щелчком по кнопке Задание значений перейдите в режим написания кода. Внутри Private Sub cmdbut1_Click() и End Sub запишите следующие инструкции:

13

Dim r As Range

For Each r In Worksheets("Задание").Range("A1:D2").Cells If Abs(r.Value) <= 2 Then

r.Value = 1 End If Next r

For Each r In Worksheets("Задание").Range("A3:D3").Cells If Application.IsText(r.Value) Then

r.Value = "Привет!" End If

Next r

For Each r In Worksheets("Задание").Range("A4:D5").Cells If Application.IsLogical(r.Value) Then

r.Value = True End If

Next r

Выполните команду Run. Нажмите кнопку Задание значений. Должен получиться следующий результат:

1

1

1

3

1

1

1

1

Привет!

Привет!

Привет!

Привет!

ИСТИНА

ИСТИНА

ИСТИНА

ИСТИНА

ИСТИНА

ИСТИНА

ИСТИНА

ИСТИНА

#ДЕЛ/0!

#ДЕЛ/0!

#ДЕЛ/0!

#ДЕЛ/0!

#ИМЯ?

#ИМЯ?

#ИМЯ?

#ИМЯ?

01.01.2001

02.01.2001

03.01.2001

04.01.2001

02.01.2001

03.01.2001

04.01.2001

05.01.2001

03.01.2001

04.01.2001

05.01.2001

06.01.2001

При нажатии на другие кнопки никакие действия не происходят, т.к. для этих кнопок не написаны процедуры обработки.

Практическое задание 14:

напишем процедуру обработки для кнопки Форматирование. Внутри

Private Sub cmdbut2_Click() и End Sub напишите следующие инструкции: Worksheets("Задание").Range("A1:D2"). _

Font.Size = 8 Worksheets("Задание").Range("A3:D7"). _ Font.Size = 10 Worksheets("Задание").Range("A8:D10"). _ Font.Size = 12

14

Выполните команду Run. Нажмите кнопку Форматирование. Должен получиться следующий результат:

8 -

 

1

 

1

 

1

3

 

 

 

 

8 -

 

1

 

1

 

1

1

10 -

 

 

 

Привет!

 

Привет!

 

Привет!

 

Привет!

10 -

ИСТИНА

 

ИСТИНА

 

ИСТИНА

 

ИСТИНА

10 -

ИСТИНА

 

ИСТИНА

 

ИСТИНА

 

ИСТИНА

10 -

#ДЕЛ/0!

 

#ДЕЛ/0!

 

#ДЕЛ/0!

 

#ДЕЛ/0!

10 -

#ИМЯ?

 

#ИМЯ?

 

#ИМЯ?

 

#ИМЯ?

12 -

01.01.200102.01.2001

03.01.2001

04.01.2001

12 -

02.01.200103.01.2001

04.01.2001

05.01.2001

12 -

03.01.200104.01.2001

05.01.2001

06.01.2001

Практическое задание 15:

напишем процедуру обработки для кнопки Проверка типа данных.

Внутри Private Sub cmdbut3_Click() и End Sub введите следующие инструкции:

Dim c As Range

For Each c In Worksheets("Задание").Range("A1:D11").Cells If Application.IsText(c.Value) Then

c.Offset(0, 4).Formula = "Текст"

ElseIf Application.IsNumber(c.Value) Then c.Offset(0, 4).Formula = "Число"

ElseIf Application.IsLogical(c.Value) Then c.Offset(0, 4).Formula = "Логическое значение" ElseIf Application.IsError(c.Value) Then c.Offset(0, 4).Formula = "Ошибка"

ElseIf c.Value = "" Then

c.Offset(0, 4).Formula = "Пустая ячейка" End If

Next c

Выполните команду Run. Нажмите кнопку Проверка типа данных. Должен получиться следующий результат в ячейках E1:H11:

Число

Число

Число

Число

Число

Число

Число

Число

Текст

Текст

Текст

Текст

Логическое значение

Логическое значение

Логическое значение

Логическое значение

Логическое значение

Логическое значение

Логическое значение

Логическое значение

Ошибка

Ошибка

Ошибка

Ошибка

Ошибка

Ошибка

Ошибка

Ошибка

Текст

Текст

Текст

Текст

Текст

Текст

Текст

Текст

15

Текст

Текст

Текст

Текст

Пустая ячейка

Пустая ячейка

Пустая ячейка

Пустая ячейка

Дата воспринимается как текст, т.к. отсутствует функция проверки ввода даты в текстовом виде. Если в ячейке A11 ввести формулу

=ДАТАЗНАЧ("01.01.2001"),

то тип данных будет определен как число.

Практическое задание 16:

напишем процедуру обработки для кнопки ОК. Внутри Private Sub cmdbut4_Click() и End Sub введите следующую инструкцию:

Unload MyForm1

Выполните команду Run. Нажмите кнопку ОК. Должен произойти выход из окна и возврат в интегрированную среду.

Таким образом, в соответствие каждой кнопки написан код, который выполняется при нажатии кнопки.

Вопросы для самоконтроля

1Что такое макрос?

2Какие существуют способы создания макроса?

3Какие существуют способы запуска макроса?

4Как задать имя макросу?

5Как назначить сочетания клавиш макросу?

6Из каких шагов состоит создание макроса?

7С какой целью создается макрос?

8Назначение языка программирования VBA

9Что такое объект с точки зрения VBA?

10Что такое метод с точки зрения VBA?

11Что такое свойства с точки зрения VBA?

12Как просмотреть текст макроса?

13Где можно просмотреть инструкции макроса?

14Как можно отредактировать макрос?

15Как при создании макрос используются относительные и абсолютные ссылки?

16Как организовываются вложенные макросы?

17Что такое процедура?

18Что такое пользовательская функция?

19Как пользовательская функция может быть создана в книге?

20Как в новой книге войти в редактор Visual Basic?

21Где сохраняется пользовательская функция?

22Как используется пользовательская функция?

23Как осуществляется вызов пользовательской функции?

16

24Каким зарезервированным словом описываются необязательные аргументы функции?

25Какие используются средства для более удобного анализа пользовательской функции?

26Что означает понятие объктно ориентированный язык программирования”?

27Что такое объект с точки зрения VBA?

28Что такое метод с точки зрения VBA?

29Что такое свойство с точки зрения VBA?

30Какие объекты имеются в приложении Excel?

31Как просмотреть свойство объекта в VBA?

32Какие основные окна присутствуют в интегрированной среде VBA?

33Как открыть окно пошаговой отладки?

34С помощью какой команды создается нестандартное диалоговое окно?

35Чем отличается процедура от функции?

36Чем отличается открытая процедура от закрытой?

37Какое зарезервированное слово используется для описания открытой процедуры?

38Какое зарезервированное слово используется для описания закрытой процедуры?

39Что такое событие?

40Какие задачи выполняет событийно управляемое программирование?

41Что такое элемент управления на форме?

42Какие элементы управления можно расположить на форме?

43Как добавляется элемент управления на форму?

44Как записать код для формы и для элемента управления?

45Какое событие характерно для кнопки?

46Какие свойства характерны для формы?

47Какие свойства характерны для кнопки?

48Как запустить на выполнение форму?

49Как осуществляется переход между кнопками на готовой форме?

50Как задать надпись на кнопке?

51Как задать имя кнопки?

52Как задать комментарий для кнопки при нажатии во время выполнения?

53Как задать горячиеклавиши для вызова кнопок?

54Какие типы данных существуют в VBA?

55Как описываются константы?

56Как описываются переменные?

57Как описываются массивы?

58Какие управляющие конструкции существуют в VBA?

59Какие операторы ветвления используются в VBA?

60Какие возможны варианты записи оператора If?

17

61Какие операторы цикла используются в VBA?

62Какие возможны варианты записи оператора цикла с заранее неизвестным количеством повторов?

63Какие стандартные функции используются для проверки содержимого ячейки в VBA?

64Какое свойство Вам известно для задания значения в ячейки?

65Какое свойство Вам известно для задания формата содержимого ячейки?

66Как в программе задать текстовое значение для ячейки?

67Как в программе задать логическое значение для ячейки?

68Какой метод используется для относительной адресации?

69Какие Вам известны способы организации закрытия окна при его выполнении?

70Как завершить выполнение кода при обнаружении ошибки?

Варианты заданий к лабораторной работе

выбираются по последней цифре зачетки +1

По теме ‘Макросы’:

Команда Definition в контекстном меню помогает выбрать значения стандартных констант при редактировании макроса.

1На первом листе диапазон ячеек A1:K10 полностью заполните рядом

понедельник, вторник,…, воскресенье в любом порядке. Напишите макрос, который находит все вторники и заменяет их на пустые ячейки. Выполните этот макрос на листе 2 через сочетание клавиш и на листе 3 через меню. В среде Visual Basic на базе данного макроса создайте новый и сохраните под другим именем диапазон должен быть A1:Z100, вместо вторника среда.

2Заполните диапазон ячеек A1:k20 содержимым разных типов текст, числа, даты, время. Напишите макрос, который для диапазона ячеек A1:K20 осуществляет автоподбор ширины ячеек и обрамляет все ячейки сеткой в виде двойной линии. Выполните этот макрос на листе 2 через сочетание клавиш и на листе 3 через меню. Отредактируйте содержимое макроса в среде Visual Basic заменив двойную линию на одинарную жирную.

3Напишите макрос, который для диапазона ячеек A1:P30 задает высоту 15, центрирует все ячейки, текст выделяет жирным курсивом. Выполните этот макрос на листе 2 через сочетание клавиш и на листе 3 через меню. Отредактируйте содержимое макроса в среде Visual Basic – высота должна быть 18, вертикальное расположение у

нижней границы и сохраните как новый макрос

4Напишите макрос, который, для диапазона ячеек A1:A15 с любыми

числовыми

значениями,

вычисляет

функцию

среднего

18

арифметического для каждых трех соседних значений и размещает результаты в ячейках B1:B15. Выполните этот макрос на листе 2 через сочетание клавиш и на листе 3 через меню. Отредактируйте содержимое макроса в среде Visual Basic – сумма трех значений деленная на 100 для диапазона B1:B50.

5Напишите макрос, который для заданного диапазона ячеек A1:G1 строит круговую диаграмму. Выполните этот макрос на листе 2 через сочетание клавиш и на листе 3 через меню. Отредактируйте содержимое макроса в среде Visual Basic – должна быть трехмерная гистограмма.

6На первом листе любой выделенный диапазон ячеек заполните рядом январь, февраль,…, декабрь. Напишите макрос, который располагает

введенные надписи вертикально и осуществляет автоподбор ширины ячеек. Выполните этот макрос на листе 2 через сочетание клавиш и на листе 3 через меню. Отредактируйте содержимое макроса в среде Visual Basic – наклон содержимого ячейки должен быть 45 градусов, содержимое по центру по горизонтали.

7Напишите макрос, который для диапазона ячеек A1:K20, с любыми введенными данными, осуществляет автоподбор ширины ячеек и обрамляет все ячейки внутри тонкой линией, снаружи - жирной. Выполните этот макрос на листе 2 через сочетание клавиш и на листе 3 через меню. Отредактируйте содержимое макроса в среде Visual Basic – толщина внутренних линий аналогично внешним, сохранить в макросе с новым именем.

8Напишите макрос, который для диапазона ячеек A1:P30 задает высоту 15, ширину 45, центрирует все ячейки, текст выделяет курсивом. Затем заполните эти ячейки данными различных типов. Выполните этот макрос на листе 2 через сочетание клавиш и на листе 3 через меню. Отредактируйте содержимое макроса в среде Visual Basic – высота должна быть 20, текст полужирным курсивом.

9Напишите макрос, который вычисляет функцию f=x+корень(x) для каждого значения в диапазоне A1:A15 и размещает результаты в ячейках B1:B15. Выполните этот макрос на листе 2 через сочетание клавиш и на листе 3 через меню. Отредактируйте содержимое макроса в среде Visual Basic – функция f=(x+корень(x))*5.

10Напишите макрос, который для заданного диапазона ячеек A1:G1 строит линейчатую диаграмму. Выполните этот макрос на листе 2 через сочетание клавиш и на листе 3 через меню. Отредактируйте содержимое макроса в среде Visual Basic – диаграмма должна быть линейчатая коническая.

По теме ‘Пользовательские функции’:

1 Напишите пользовательскую функцию, которая проверяет для каждой тройки значений (из четырех введенных – a, b, c, d), можно ли

19

построить из них треугольник. Функция должна возвращать логический результат.

2Напишите пользовательскую функцию, которая вычисляет медиану

треугольника и вычислите с помощью данной функции медианы

треугольника со сторонами a, b, c. Медиана к стороне а вычисляется по формуле m=0.5*sqrt(2*b2+2*c2-a2). Для проверки введите 6, 5, 5,

должно получиться 4.

3Напишите функцию вычисления факториала числа. В функции должна присутствовать проверка вводимого значения (>=0). Затем проверьте полученные значения с помощью стандартной функции.

4Напишите функцию, которая выдает 0, если аргумент <=0, аргумент*2, если аргумент в диапазоне от 1 до 5, аргумент*аргумент, если аргумент в диапазоне от 6 до 10 и в других случаях – 1.

5Напишите функцию, которая находит среднее арифметическое

четырех введенных значений и выводит наиболее близкое к среднему из четырех введенных.

6Напишите функцию, которая проверяет аргумент, делится ли он нацело на 3, и если делится, то вывести результат деления, если не делится, то вывести остаток от деления нацело (например, 33 – делится 11 раз, 32 – остаток 2).

7Напишите функцию, которая будет вычислять f=sin(x), если x>0, f=0, если x=0 и f=cos(x), если x<0 и примените ее к диапазону значений от

–5Pi до 5Pi с шагом 0,4Pi.

8Напишите функцию, которая будет определять, в каком квадранте находится точка с координатами x и y. Проверьте работу функции на базе стандартной функции y=sin(x), где x изменяется от –5Pi до +5Pi и

ееграфика.

9Напишите функцию, которая проверяет, что больше sin(x), cos(x) или tan(x) и выводит соответствующий комментарий. Проверьте на диапазоне от –5Pi до +5Pi и с помощью стандартных функций sin, cos

и tan.

10Напишите функцию, которая определяет, какое из двух введенных чисел больше и выводит соответствующий комментарий. Проверьте

еевыполнение на базе значений стандартных функций sin и cos,

построенных для диапазона от –5Pi до +5Pi (постройте их графики).

По теме ‘Введение в Visual Basic’:

1Создайте форму и расположите на ней кнопку. Нажатие кнопки должно выдавать текущую дату в ячейки A1:A5 и сообщение, например, “Сегодня 1.03.01 – Весна!” и задавать ширину ячейки, достаточную для вывода данного сообщения.

2Создайте форму и расположите на ней три переключателя (для выбора одного из группы), при выборе первого в ячейки A1:A5

20

должно заноситься значение 10, при выборе второго в A1:A5 значение 20, при выборе третьего в A1:A5 значение 30.

3Создайте форму и расположите на ней три флажка, первый должен включать полужирное начертание, второй курсив, третий

подчеркивание для диапазона A1:D10.

4 Создайте форму и расположите на ней три кнопки, первая осуществляет ввод массива в диапазон A1:A10 текущего листа, вторая находит сумму элементов массива и выводит ее в ячейке B1, третья находит среднее арифметическое элементов массива и выводит элементы, меньшие среднего арифметического в диапазон D1:D10, а в C1 – среднее арифметическое.

5Создайте форму и расположите на ней три флажка, первый должен задавать для диапазона A1:D10 любой текст или оставлять ячейки пустыми, второй должен задавать размер символов – 20 или оставлять стандартными (12), третий должен задавать цвет символам зеленый или оставлять стандартный черный.

6Создайте форму и расположите на ней три переключателя (для выбора одного из группы). При выборе первого, содержимое ячеек A1:D10 должно быть размером – 10, при выборе второго – 20, при выборе третьего – 30.

7Создайте форму и расположите на ней две кнопки. Первая определяет содержимое ячеек в диапазоне A1:A10 и выдает сообщение числов диапазон B1:B10, если число, вторая вычисляет произведение положительных значений и вводит его в ячейку С1 и вычисляет произведение отрицательных значений и вводит в ячейку D1.

8Создайте форму и расположите на ней две кнопки. Первая анализирует содержимое ячейки A1 и ячейки B1 и выдает сообщение числов ячейки A2 и B2, если число, вторая возводит число из ячейки A1 в степень из ячейки B1 и вводит результат в C1.

9Создайте форму и расположите на ней три флажка. Первый задает либо красный цвет для ячеек диапазона A1:A10, либо основной (белый), второй - голубой для B1:B10 (или основной), третий зеленый для C1:C10 (или основной).

10Создайте форму и расположите на ней три переключателя (для выбора одного из группы). Первый задает голубой фон для диапазона A1:D10, второй красный, третий желтый.

Рекомендуемая литература

1 Руководство программиста по Visual Basic для Microsoft Office 97/Пер. с англ. – М.: Издательский отдел Русская РедакцияТОО

“Channel Trading Ltd.”, 1997. – 544 с.: ил.

2Браун С. Visual Basic 6: учебный курс СПб: ЗАО Издательство

Питер”, 1999. – 576 с.: ил.