На чтение 2 мин Просмотров 2.2к. Опубликовано 13.05.2022
В Excel есть некоторые вещи, которые довольно сильно мне не нравятся. Но плюс этой программы в том, что она очень гибкая. То есть, если что-то вас сильно раздражает — можно это просто убрать.
Для меня, эти пунктирные линии, как раз и есть эта раздражающая вещь.
В данной статье я продемонстрирую вам, как можно убрать их.
Итак, начнём!
Содержание
- Почему они появляются?
- Как их удалять?
- Из-за разрыва страниц
- Из-за включения опции «Границы»
- Из-за сетки
Почему они появляются?
Причины:
- Разрыв страниц;
- Границы, которые кто-либо установил;
- Сетка;
Если вы столкнулись с такой линией, то возможно она появилась по одной или сразу нескольким из этих причин.
Как их удалять?
Тут все зависит от причины, по которой линии появились.
Из-за разрыва страниц
Наверное, это самая частая причина.
Суть этих линий в том, чтобы вы могли видеть как будет печататься документ. Она как бы показывает вам, как будет разделена таблица на страницы.
Эти линии можно убрать очень просто — просто закрыть и открыть заново файл. Линии пропадут.
Но если вам нужно сделать так, чтобы эти линии никогда не появлялись, то:
- Щелкните «Файл»;
- Далее — «Параметры»;
- «Дополнительно»;
- Найдите раздел «Параметры отображения листа»;
- И отключите опцию «Показывать разбиение на страницы».
По итогу, пунктирные линии, которые появились по этой причине, вы больше никогда не увидите.
Но не забывайте, что таким способом вы отключаете эту опцию только для текущего файла.
Из-за включения опции «Границы»
Теперь рассмотрим ситуацию, когда пунктирные линии появились из-за того, что кто-то включил отображение границ ячеек.
Вот пример:
Итак, чтобы их убрать нам нужно отключить отображение границ.
Пошаговая инструкция:
- Выделите табличку;
- Щелкните «Главная»;
- А далее откройте функцию «Граница»;
- И щелкните на «Нет границ».
Готово! Пунктирных линий, появившихся по этой причине, вы больше не увидите.
Если необходимо, вы можете отобразить эти границы по-другому, не пунктирной линией.
Из-за сетки
На самом деле, при включении сетки, мы сталкиваемся не совсем с пунктирными линиями. Но они очень похожи.
А также, эту сетку очень просто отключить.
Пошаговая инструкция:
- Щелкните «Вид»;
- И отключите опцию «Сетка».
Все, теперь сетка пропадет. Включить её можно точно также, как и отключили.
Вот и все! В данной статье мы рассмотрели, как можно убрать пунктирные линии.
Надеюсь, эта статья оказалась полезна для вас!
�������� ������� ������
�������� ������� ������
����� �� � Excel ������� ������� ������? ��, �����, � ������� ��� � ���� ���, ����������� � �������� 3.74.
������� 3.74. �������� ������� ������
Dim intSpacesLeft As Integer ‘ ���������� �������� � ������
������
Sub Start()
‘ ��������� ���������� ���������� ��������
intSpacesLeft = 10
‘ ������ ����� ������� ������� ������
MovingString
End Sub
Sub MovingString()
If intSpacesLeft >= 0 Then
‘ ����������� ������
Range(�A1�).Value = Space(intSpacesLeft) & �������!�
intSpacesLeft = intSpacesLeft � 1
‘ �������� Excel, ��� ������ ��������� ����� ������� ����� _
1��������
Application.OnTime Now + TimeValue(�00:00:01�),
�MovingString�
End If
End Sub
����� ������� ������� Start � ������ Al ����� ������������ ������� ������ � ������� ������!.
Бегущая, ползущая и танцующая строки в VBA Excel. Использование цикла For…Next и метода Application.Wait для задержки выполнения кода. Скачать файл с примером.
Для создания визуальных эффектов будем использовать цикл For…Next и метод Application.Wait. Также для этих целей отлично подойдет функция Timer, предложенная Андреем в комментариях. Использовать такие программы можно в учебных целях, а также для личного наблюдения и демонстрации визуальных эффектов. Приведенные здесь примеры лучше запускать с помощью кнопок из панели «Элементы управления формы», размещенных на рабочем листе.
Бегущая строка
Вариант №1
Этот вариант кода используется для создания бегущей строки в отдельной или объединенной ячейке, а также его можно применить для свойства Caption пользовательской формы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
Sub BegushchayaStroka() Dim stroka1 As String, stroka2 As String, _ probely As Integer, dlina As Integer, _ kolichestvo As Integer, zaderzhka As Long stroka1 = «Моя бегущая строка» probely = 10 kolichestvo = 3 zaderzhka = 500 stroka1 = space(probely) & stroka1 dlina = Len(stroka1) Dim i1 As Integer, i2 As Integer, i3 As Integer For i1 = 1 To kolichestvo For i2 = 1 To dlina stroka2 = Right(stroka1, dlina — i2) & Left(stroka1, i2) ‘——————————— Cells(3, 5) = stroka2 ‘——————————— For i3 = 1 To zaderzhka Cells(100, 1) = «» Next ‘——————————— Next Next End Sub |
Описание переменных:
- stroka1 — исходный текст бегущей строки;
- stroka2 — меняющийся в цикле текст и присваиваемый ячейке с бегущей строкой;
- probely — количество пробелов, добавляемых перед исходным текстом, чтобы отделить одно бегущее словосочетание от следующего;
- dlina — длина исходной строки с добавленными пробелами;
- kolichestvo — количество пробегов исходной строки;
- zaderzhka — максимальное количество выполнений цикла задержки, используется для регулирования скорости движения бегущей строки;
- i1, i2, i3 — счетчики циклов.
В данном примере для задержки выполнения кода используется цикл с присваиванием сотой ячейке первого столбца пустой строки. Этот цикл дает большую задержку при одинаковом количестве итераций в отличие от пустого цикла, который часто используется в таких случаях.
Бегущая строка наблюдается в ячейке Cells(3, 5), которой циклом присваивается меняющееся значение переменной stroka2. Вы можете использовать любую фиксированную ячейку или ActiveCell. Для более качественного визуального эффекта используйте в ячейке с бегущей строкой моноширинный шрифт (Courier New, MS Reference Sans Serif), так как у пропорционального шрифта очень короткие пробелы и на них бегущая строка сильнее замедляется.
Остановить выполнение макроса до его завершения можно, дважды нажав клавишу «Esc», или сочетанием клавиш «Ctrl+Break» (протестировано в Excel 2016).
Вариант №2
Еще одну интересную бегущую строку можно наблюдать, когда каждому символу строки соответствует отдельная ячейка. Для этого необходимо в предыдущем коде заменить строку
на строки
For i3 = 1 To dlina Cells(1, i3) = Mid(stroka2, i3, 1) Next |
Бегущая строка будет наблюдаться в первой строке рабочего листа. Цикл будет заполнять ячейки первой строки символами, содержащимися в значении переменной stroka2. Ничего страшного, что переменная счетчика i3 будет использоваться дважды, так как циклы не являются вложенными и выполняются отдельно друг от друга.
Для второго примера можно использовать любой шрифт в используемых ячейках, так как на скорость движения бегущей строки уже не будут влиять размеры символов.
Ползущая строка
Для замедления кода при создании визуальных эффектов можно использовать метод Application.Wait, который позволяет замедлить каждую итерацию цикла минимум на 1 секунду. С одной секундой задержки можно получить только ползущую строку, но никак не бегущую. Наблюдение за ползущей строкой в одной или объединенной ячейке сразу вызывает желание остановить макрос. Это можно сделать однократным нажатием клавиши «Esc» или сочетанием клавиш «Ctrl+Break».
Лучше смотрится ползущая строка, когда каждый символ занимает отдельную ячейку, поэтому на таком варианте можно продемонстрировать задержу с помощью метода Application.Wait. Для этого в коде первого варианта необходимо строки
‘——————————— Cells(3, 5) = stroka2 ‘——————————— For i3 = 1 To zaderzhka Cells(100, 1) = «» Next ‘——————————— |
заменить на строки
‘——————————— For i3 = 1 To dlina Cells(1, i3) = Mid(stroka2, i3, 1) Next ‘——————————— Application.Wait (Now + TimeValue(«0:00:01»)) ‘——————————— |
Не обращайте внимания на ставшую ненужной переменную zaderzhka, которая на работу кода не повлияет.
Танцующая строка
В этом примере будем использовать задержку с помощью цикла For…Next, так как метод Application.Wait здесь совершенно не подходит.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
Sub TantsuyushchayaStroka() Dim stroka1 As String, stroka2(14) As Variant, _ probely As Integer, _ kolichestvo As Integer, zaderzhka As Long stroka1 = «Моя танцующая строка» probely = 15 kolichestvo = 3 zaderzhka = 500 stroka2(0) = space(probely / 2) & stroka1 _ & space(probely / 2) stroka2(1) = «» stroka2(2) = space(probely / 2) & stroka1 _ & space(probely / 2) stroka2(3) = «» stroka2(4) = space(probely / 2) & stroka1 _ & space(probely / 2) stroka2(5) = «» stroka2(6) = stroka1 & space(probely) stroka2(7) = «» stroka2(8) = stroka1 & space(probely) stroka2(9) = «» stroka2(10) = space(probely) & stroka1 stroka2(11) = «» stroka2(12) = space(probely) & stroka1 stroka2(13) = «» stroka2(14) = space(probely / 2) & stroka1 _ & space(probely / 2) Dim i1 As Byte, i2 As Integer, i3 As Integer For i1 = 1 To kolichestvo For i2 = 0 To 14 Cells(5, 5) = stroka2(i2) For i3 = 1 To zaderzhka Cells(100, 1) = «» Next Next Next End Sub |
Все расположения танцующей строки в ячейке записаны в массив stroka2() и регулируются количеством присоединенных пробелов. Если будете экспериментировать, сразу задайте заведомо большее количество элементов массива.
Файл для скачивания
Для ознакомления можете скачать по этой ссылке архив с файлом в формате Excel 2007-2016 (.xlsm), в котором есть процедуры (и кнопки для их запуска), создающие
- ползущую строку в первой строке рабочего листа;
- бегущую строку в 5 ячейке 3 строки;
- танцующую строку в 5 ячейке 5 строки.
Возможно, вам придется значительно уменьшить значение переменной zaderzhka, так как эти макросы тестировались на компьютере с высокой производительностью. Ползущая строка, независимо от внешних факторов, будет перемещаться со скоростью один знак в секунду благодаря применению для задержки метода Application.Wait.
Во всех предложенных здесь примерах цикл For…Next и метод Application.Wait, использующиеся для приостановки процедур, можно заменить на код с функцией Timer.
Эффект бегущего пунктира |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Предлагаю коллегам
А.Н. Комаровский,
Россошанская школа-интернат Воронежской
области, kan@bk.ru
Использование MS Excel для расчетов,
математического моделирования, подготовки
документов или в качестве базы данных
общеизвестно. Однако в это приложение заложен
потенциал, о котором, видимо, не подозревали даже
его разработчики, позволяющий эффективно
использовать этот программный продукт в
дидактических целях на уроках не только
естественно-научного, но и гуманитарного цикла, и
даже в начальной школе. С помощью электронных
таблиц MS Excel можно подготовить демонстрационные
пособия, лабораторные и практические работы,
проверочные и тестовые задания, сделав их не
только красочными, но и динамичными. Для этого
достаточно владения самой программой,
знакомства с основными конструкциями (ветвления
и циклы) языка программирования Basic, а также вашей
творческой фантазии и желания. И тогда “оживут”,
станут понятными и запоминающимися многие
иллюстрации учебников, появится возможность
проводить лабораторные и практические работы в
соответствии с программой даже при отсутствии
необходимого оборудования. Да и изучение темы
“Программирование” в курсе информационных
технологий станет увлекательным занятием.
Динамические эффекты в MS Excel можно
создавать, используя условное форматирование,
макросы, счетчики или комбинируя эти методы.
При этом можно применять:
· форматирование ячеек: изменение
цвета, размеров, границ, объединение и разбивку,
вставку и удаление, скрытие и выделение;
· форматирование символов (изменение
цвета, размера, начертания, видоизменения и
выравнивания);
· изменение векторных объектов,
созданных с помощью панели рисования или
импортированных (примитивов, автофигур,
надписей, объектов WordArt), с которыми можно
производить перенос, вращение и форматирование
(заливки, прозрачность, изменение контуров,
настройку тени и объема);
· изменение растровой графики:
размеров, обрезки, яркости и контрастности, а
также перемещение, вращение и смену слайдов;
· разнообразные эффекты с графиками и
диаграммами (динамическое построение и
видоизменение);
· удаление и вставку разнообразных
объектов;
· последовательный переход с одного
листа книги на другой;
· изменение масштаба отображения
рабочего листа;
· прокручивание окна по вертикали,
горизонтали или то и другое.
Почти во всех приложениях MS Office
существует возможность записи
последовательности действий пользователя при
работе с документом в виде макросов —
инструкций на языке программирования Visual Basic
for Application (VBA), среда которого интегрирована
с этими программами. Обычно макросы используются
для автоматизации часто повторяющихся
последовательностей действий. При этом не
предполагается необходимость владения самим
языком. Достаточно того, что его понимает
интерпретатор вашего приложения. Пользователь
только выполняет действия, а приложение
отслеживает их и фиксирует в виде
последовательности команд и операторов.
Однако это не означает, что знание
основ VBA не понадобится вам в дальнейшем, по мере
совершенствования вашего мастерства. Просто
процесс вхождения в эту среду будет происходить
более плавно и естественно, тем более что
несомненным достоинством данной технологии
является доступность макросов для анализа и
экспериментов. Важно, чтобы у вас была задумка и
желание.
Правда, этой технологии не по силам
самостоятельно объявить массив, организовать
цикл, ветвление или передачу данных из одного
макроса в другой. Но для этого не надо быть семи
пядей во лбу. Вполне достаточно владения
программированием на уровне
общеобразовательной школы, и не обязательно на
языке Basic, так как упомянутые структуры в разных
языках программирования отличаются
незначительно.
Готовые проекты, рассматриваемые в
этой статье, можно скачать с портала газеты
“Информатика” по адресу: https://inf.1sept.ru/download/dinex.rar.
В более сложных работах макросы снабжены
комментариями, по поводу остальных — пояснения
читайте здесь.
Несмотря на то что в этой статье речь
идет только об электронных таблицах Microsoft Excel,
многие из предлагаемых идей можно использовать и
в других офисных приложениях.
Предварительная подготовка
Запуск файла и система безопасности
Для того чтобы макросы исполнялись в MS
Excel, могут понадобиться дополнительные
настройки. Выберите в меню Сервис — Макрос —
Безопасность… и установите средний уровень
безопасности. После этого файл закройте и
откройте снова. Если вы открываете файл, в
котором есть макросы, появится предупреждение
системы безопасности о возможности наличия в них
вирусов. При уверенности, что открываемый файл
безопасен для вашего компьютера, нажмите кнопку
Не отключать макросы.
Настройка рабочего листа
Во многих случаях при создании
демонстрационных пособий полезен вид листа с
сеткой, похожей на разлиновку тетради “в
клетку”. Для этого выделите весь лист, щелкнув в
клетку на пересечении заголовков столбцов и
строк, а затем, перейдя на заголовки столбцов,
через контекстное меню установите ширину
столбцов равную 2. При необходимости сетку можно
отключить, выбрав в меню Сервис — Параметры
закладку Вид, на которой сбросить флажок сетка.
Панель Visual Basic
Для работы с макросами удобно
пользоваться панелью Visual Basic, для отображения
которой вызовите контекстное меню на панели
инструментов и выберите строку Visual Basic.
Кнопка
служит для включения записи макроса. После
нажатия на нее появляется диалоговое окно, в
котором вам предлагается дать имя макросу и
выбрать сочетание клавиш для его запуска. Можете
оставить все по умолчанию, однако поиск
необходимого макроса по его номеру при создании
большого проекта может усложниться. Закрыв
диалоговое окно, вы обнаружите, что кнопка Запись
макроса изменила свой вид на и теперь служит для того, чтобы
Остановить запись. Запуск макроса на исполнение
осуществляется кнопкой Выполнить макрос . При ее нажатии
появляется диалоговое окно, в котором
предлагается выбрать макрос для выполнения,
изменения, удаления или установки параметров
запуска. Изменение макроса осуществляется в
интегрированной среде, в которую можно перейти и
нажатием на кнопку Редактор Visual Basic. Кнопкой вызывается панель
Элементы управления, но, чтобы воспользоваться
ею, необходимо с помощью кнопки переключиться в Режим
конструктора.
Сбои при исполнении макросов и досрочный выход
Исполняя макрос, Excel всецело занят
только им и не реагирует на попытки
вмешательства. Прервать макрос можно нажатием на
клавишу . При
досрочном выходе, а также при отладке нередки
ситуации ошибок и сбоев, после которых Excel
перестает откликаться на ваши действия. Для того
чтобы вывести его из состояния “оцепенения”,
необходимо переключиться в Редактор
Visual Basic и на панели инструментов нажать
кнопку с квадратиком Reset.
Защита файлов
В ходе работы над проектом с
использованием макросов вы обнаружите, что после
исполнения макроса невозможно вернуться в
исходное состояние с помощью кнопки Отменить. По
этой причине рекомендуется, в случае угрозы
потери существенной части вашей работы, перед
созданием и испытанием нового макроса сохранять
последнюю работоспособную версию, а для
отлаженных файлов в качестве меры защиты
устанавливать в свойствах атрибут Только чтение.
Перенос файлов на другие компьютеры
Отлаженный и замечательно работающий
проект может совсем иначе повести себя на другом
компьютере. Первой причиной такого неожиданного
поведения может оказаться более ранняя версия MS
Excel, чем у вас. Так, например, если вы создавали
свой проект в MS Office 2003, то в MS Office 2000 могут
возникнуть проблемы с полупрозрачными и
градиентными заливками графических объектов.
Кроме того, там отсутствует возможность
обращения в макросе к элементу группы по его
имени, и если вы использовали группировку, то
проблем вам не избежать. Другой причиной, которая
возникает даже при совпадающих версиях, является
то, что, помимо вашего желания, файл проекта
сохраняет следы экспериментов по использованию
приложений, которые в окончательный вариант даже
не вошли, но на другом компьютере или вовсе не
установлены, или сконфигурированы иначе.
Чтобы избежать этой проблемы,
необходимо в Редакторе Visual Basic через меню Tools —
References открыть диалоговое окно Available References
(доступные ссылки) и убрать, где можно, флажки.
Вставка и настройка элементов управления
Макрос можно запустить определенным
сочетанием клавиш, щелчком на графическом
объекте или с помощью элементов управления.
Остановимся на последнем способе и рассмотрим создание
и настройку кнопки и счетчика. Счетчики
понадобятся нам для управления макросами.
Вызовите панель Элементы управления,
нажав на панели Visual Basic кнопку , и выберите на ней элемент Кнопка .
Не отпуская правую кнопку мыши,
нарисуйте на рабочем листе кнопку необходимого
размера. Для настройки свойств кнопки сделайте
на ней двойной щелчок левой кнопкой мыши.
Откроется окно Visual Basic с окнами проекта (Project),
свойств (Properties) и кода.
В окне свойств, в строке Caption
(заголовок), текст CommandButton1 измените на подходящий
по назначению кнопки, остальные свойства, в том
числе и имя объекта (Name), можно не менять.
Чтобы макрос запускался нажатием
кнопки, его текст необходимо скопировать в окно
кода в пространство между строками Private
Sub CommandButton1_Click() и End Sub.
Для создания счетчика выберите на
панели элементов управления кнопку и на рабочем листе
нарисуйте изображение счетчика в вертикальном
или горизонтальном исполнении. Двойным щелчком
по изображению счетчика перейдите в Visual Basic и на
панели свойств объекта SpinButton в строке LinkedCell
(связанная ячейка) укажите имя ячейки, в которой
будут отображаться значения счетчика.
В строке Max установите
максимальное допустимое значение, а в строке Min — минимальное (неотрицательное),
исправив предлагаемые по умолчанию значения.
Свойство SmallChange позволяет
устанавливать шаг счетчика (целое число). В
случае необходимости отрицательных значений и
дробных шагов используется ячейка с формулой, в
которой на основе данных связанной ячейки
вычисляются необходимые значения. Связанную
ячейку в этом случае можно скрыть. Свойство Value устанавливает начальное значение
счетчика и отображает текущее значение, которое
можно читать и изменять в макросе, обращаясь к
нему SpinButton1.Value.
Свойство Delay (задержка) позволяет
установить время реакции на нажатие кнопок
счетчика.
Ячейки MS Excel
При работе с макросами ячейки
электронных таблиц можно использовать не только
по их общеупотребительному назначению, но и как
область памяти для хранения данных, используемых
в макросах (переменных и массивов), и как буфер
обмена данными между макросами. Ячейка может
играть роль пикселя, быть составной частью
изображения и даже кадром анимации.
Обращение к ячейке
При записи макроса обращение к ячейке,
точнее ее имя, обычно выглядит так Range(«F4»), а
к диапазо-ну — Range(«F19:G21») или
Range(«F6:H11,J11,K8»), то есть обращение как к
диапазону, так и к ячейке происходит по единому
правилу. Однако это не всегда бывает удобно,
особенно когда в качестве номера строки или
столбца используются переменные (например, в
цикле). В этом случае Range(«F4») лучше заменить
на Cells(4,6), где 4 — номер строки, а 6 — номер столбца
F. Чтобы быстро определять номер столбца, полезно
на стадии создания проекта в первой строке
методом протягивания за маркер автозаполнения
их пронумеровать в пределах окна.
Обращение к ячейкам без выделения
Записывая макрос, мы выделяем те или
иные объекты, а затем производим изменения их
свойств. При этом ячейки и диапазоны выделяются
широкими черными границами и заливкой, тексты —
черным фоном и инверсным цветом, а графические
объекты — угловыми и боковыми маркерами. Если не
принять никаких мер, то при воспроизведении
анимации такого рода “сопровождение” никуда не
исчезнет и будет только отвлекать от сути. Однако
проблема вполне разрешима. Рассмотрим фрагмент
макроса:
Range(«E10»).Select
Selection.ClearContents
Selection.FormulaR1C1 = «Привет!»
With Selection.Font
.Name = «Times New Roman»
.Size = 16
.ColorIndex = 3
End With
Selection.Interior.ColorIndex = 37
В первой строке выделяется (Select) ячейка
«E10». В последующих строках обращение к ней
идет как к выделенному объекту. Попробуем
заменить Selection на конкретное имя ячейки
Range(«E10») или Cells(10,5), удалив первую строку
этого макроса:
Range(«E10»).ClearContents
Range(«E10»).FormulaR1C1 = «Привет!»
With Range(«E10»).Font
.Name = «Times New Roman»
.Size = 16
.ColorIndex = 3
End With
Range(«E10»).Interior.ColorIndex = 37
Все работает, результат тот же, только
выделение отсутствует.
Присваивание
Для занесения значений в ячейки
необходимо воспользоваться командой
присваивания, варианты записи которой могут
выглядеть следующим образом:
Range(«F6»).Value = 5 + Range(«С4»).Value
Range(«D10»).FormulaR1C1 = «Привет!»
Cells(5,8).Value = «Стоп»
Cells(i,12).Value = Min*2
Существуют и другие способы.
Очистить же содержимое ячейки
можно, например, так: Range(«B4»).Value = «» или
иначе — Range(«B4»).ClearContents.
Задержка
Для создания анимации,
соответствующей нормальному восприятию,
приходится сдерживать высокоскоростные
возможности современных процессоров. В Visual Basic
мне, как ни прискорбно, не известно другого
способа, кроме вставки пустого цикла. Жаль, что
ресурсы процессора используются в это время так
неэффективно, и здесь невольно вспоминается
калитка Эдисона, при открывании которой гость
закачивал в бак ведро воды.
В начале макроса обычно приходится
задавать значение переменной, соответствующей
оптимальной задержке:
Tik = 1000000 ‘задержка
Ее величина зависит от тактовой
частоты процессора, и вполне возможно, что у вас
она будет на порядок выше. В этом случае
достаточно будет произвести коррекцию только
этой строки. Сам же пустой цикл будет иметь вид:
For t = 1 To Tik: Next t
При необходимости замедлить или
ускорить процесс в отдельных эпизодах макроса
переменную Tik в цикле можно умножить или поделить
на соответствующий коэффициент.
Скрытие элементов
Довольно часто встречаются ситуации,
когда появляется необходимость скрыть некоторые
объекты. В одних случаях это данные, в других —
ячейки или таблицы, в третьих — графические
элементы.
В зависимости от ситуации можно воспользоваться
одним из предлагаемых вариантов:
· окраска в цвет фона;
· удаление за пределы окна;
· скрытие строк или столбцов (через
меню Окно — Скрыть);
· размещение на другом листе, который
можно скрыть (Формат — Лист — Скрыть);
· скрытие за объект;
· прижатие к краю окна (отрезков);
· растворение (прозрачность или Нет
линий, Нет заливки);
· масштабирование (уменьшение
размеров).
Динамические эффекты на основе
форматирования
Имитация движения. Пакет
Для начала продолжим линию,
предложенную выше, по созданию моделей передачи
информации, но добавим в этот процесс обычное
форматирование с использованием задержки.
Выделим часть десятой строки в
пределах окна и применим Формат — Ячейки… —
Граница и выберем нижнюю тонкую сплошную линию,
цвет Авто.
Включим запись макроса. Выделим первую
ячейку на этой же строке, и ее нижнюю границу
отформатируем указанным способом так, чтобы она
стала сплошной широкой и красной. Не выключая
запись макроса, еще раз отформатируем эту же
ячейку так, как отформатирована вся строка.
Запись макроса можно остановить.
При его запуске мы фактически ничего
не увидим, так как перекраска границы происходит
за недоступное нашему восприятию время. Однако
идея уже понятна: демонстрацию первого
форматирования нужно увеличить (здесь нам
поможет задержка), а после стирания (второе
форматирование) необходимо, чтобы процесс
распространился дальше (для этого воспользуемся
циклом).
Теперь смелее нажимаем кнопку
Выполнить макрос
и, выбрав Изменить…, войдем в Редактор Visual Basic.
Преобразуем его в соответствии с нашим планом:
Tik = 1000000
For C = 1 To 40
With Cells(10, C).Borders(xlEdgeBottom)
.LineStyle = xlDash
.Weight = 4
.ColorIndex = 3
End With
For i = 1 To Tik: Next i
With Cells(10, C).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = 2
.ColorIndex = xlAutomatic
End With
Next C
А теперь настало время запустить…
Пакет помчался вдоль линии связи. Откорректируем
величину задержки.
Удаление избыточной информации
Макрос довольно подробно фиксирует не
только те свойства объекта, которые вы изменяли,
но и те, что не изменялись. Не всегда это
оправданно. В большинстве случаев избыточную
информацию без проблем можно удалить, от чего
ваша программа станет более простой и понятной.
Довольно скоро вы станете различать, какие
строки в макросе имеют прямое отношение к вашим
действиям, а какие образовались из-за его
чрезмерного усердия.
Вот красноречивый пример окраски
границ ячейки в синий цвет. В ответ на
элементарное действие пользователя макрос
разразился целой тирадой:
Range(«D2»).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 5
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 5
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 5
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 5
End With
Тот же самый результат получим,
преобразовав макрос к виду:
Range(«D2»).Borders.ColorIndex = 5
Всего-то одна строка!
Не при всяких действиях макросы бывают
такими “многословными”, поэтому не пугайтесь.
Из пункта А в пункт Б
Попытаемся усовершенствовать
предыдущий проект, используя более зрелищный
подход. Отформатируем ту же строку, установив в
ней размер символов 36, а заливку ячеек —
бледно-зеленой. Включив запись макроса, выполним
следующие действия:
— в первую ячейку нашей строки
вставим символ велосипеда из шрифта “Webdings”, а в
вышележащую — стрелку из шрифта “Wingdings 3” (цвет
символов — по вашему вкусу);
— удалим только что вставленные
символы и остановим запись макроса.
Теперь откроем макрос кнопкой на панели Visual Basic и
приведем его к виду:
For C = 1 To 40
Cells(10, C).Value = «b»
Cells(10, C).Font.Name = «Webdings»
Cells(9, C).Value = «Ж»
Cells(9, C).Font.Name = «Wingdings 3»
For t = 1 To Tik: Next t
Cells(10, C).Value = «»
Cells(9, C).Value = «»
Next C
Не забудьте задать значение
переменной для задержки.
Уже можно проиллюстрировать задачу из
учебника для начальной школы или загадку “А и Б
сидели на трубе”.
Символы многих транспортных средств в
разных ракурсах можно найти в шрифте “Transportation”.
Бегущая строка
Поменяв направление на обратное и
использовав вставку не одного символа, а целого
сообщения, получим возможность использования в
своих проектах на Excel бегущей строки:
For C = 40 To 1 Step -1
Cells(10, C).Value = «Бегущая строка»
For t = 1 To Tik: Next t
Cells(10, C).Value = «»
Next C
Если у вас вместо ожидаемого текста
бежит набор графических символов,
отформатируйте строку под шрифт Arial. Старайтесь
не перегружать макросы и все, что можно
подготовить для его работы, выполнять обычными
методами. Так, в предыдущем проекте, если
предварительно установить в строке 10 шрифт Webdings,
а в строке 9 шрифт Wingdings 3, то необходимость в
соответствующих строчках макроса отпадет, и он
получится еще короче.
Схема управления
Следующий проект вы можете
подготовить для демонстрации на уроках
информатики при изучении темы “Модель замкнутой
системы управления”. Изображения управляющей
системы и объекта управления выполнены способом
объединения диапазонов ячеек и форматирования
внешних границ. Каналы связи также “вычерчены”
методом форматирования. Передача управляющего
сигнала и информации о состоянии объекта
осуществляется с помощью макроса на основе
вставки символа и форматирования границы ячейки.
В активном состоянии объекты выделяются цветом,
что тоже отражено в макросе.
Устранение вибраций
В проектах с использованием
динамических эффектов на основе форматирования
границ ячеек при исполнении макроса может
наблюдаться “вибрация” картинки в окне. Причина
этого явления кроется в том, что при выборе
широкой границы размер текстового поля в ячейке
не изменяется, а изменяется ширина или высота
ячейки. Для устранения этой неприятности можно
за пределами сцены выделить столбец и
отформатировать горизонтальные границы ячеек
цветом фона максимальной ширины. В случае
необходимости аналогичную процедуру можно
произвести за пределами сцены и с какой-либо
строкой, выделив вертикальные границы. Не
возбраняется и индивидуальный, творческий
подход.
Автобус
Идея этого динамического эффекта
основана на изменении размеров символов. Из
шрифта “Webdings” вставлен символ автобуса. Размер
символа изменяется в цикле с задержкой. Для
получения крупного изображения диапазон 10 x 10
ячеек объединен.
For s = 1 To 300
Range(«AP3»).Font.Size = s
For t = 1 To Tik: Next t
Next s
Иногда, по непонятной причине, автобус
при исполнении этого макроса застревает на
полпути. При повторных запусках такого явления
не наблюдается.
Связь
Для моделирования передачи информации
можно использовать принцип бегущих огней,
используемый в елочных гирляндах, когда по
очереди загорается или, наоборот, гаснет каждая
третья лампочка. Воплотить в макросе это можно
следующим образом: в цикле выделяются границы
ячеек, чьи номера кратны 3, затем следующие за
ними и еще раз следующие, после чего все
повторяется. Создается эффект бегущей волны.
For M = 1 To 10
n = M Mod 3
For p = 2 To 40 Step 3
With Cells(7, p + n).Borders(xlEdgeBottom)
.LineStyle = xlDash
.Weight = xlMedium
.ColorIndex = 3
End With
Next p
For p = 2 To 40 Step 3
With Cells(7, p + n).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Next p
Next M
Внешний цикл задает число повторов,
внутренние циклы можно переставить местами.
Цепь
В модели простейшей электрической
цепи при нажатии на кнопку замыкается
выключатель. Положительные заряды, как им и
положено по теории, бегут от “плюса” к
“минусу”. Лампочка загорается. Всем процессом
управляет малюсенький цикл, который в ячейке под
кнопкой чередует данные: 0, 1, 2.
For p = 0 To 20
Range(«G8»).Value = p Mod 3
For t = 1 To Tik * 5: Next t
Next p
Range(«G8»).Value = 3
Остальное реализовано с помощью
формул и условного форматирования. Ячейки по
внешнему периметру схемы берут данные из
управляющей ячейки непосредственно (путем
“заморозки” ссылок) или по цепочке. Одни ячейки
перекрашивают границу, образующую проводник, при
условии равенства нулю, следующие при единице и,
наконец, при двойке. Данные в них скрыты путем
выбора цвета символов под цвет фона. Что касается
внутренних ячеек, то они содержат формулы вида: =ЕСЛИ($G$8=2;“+”;“”). Здесь в условии в
левой части равенства ссылка на управляющую
ячейку, а в правой — 0, 1 или 2, в порядке
чередования.
Изменение положения выключателя
осуществлено путем смены форматирования границ
диапазона с диагонального на боковое. Источник
питания создан с помощью панели рисования, а
лампа взята из автофигур.
Последняя строка Range(«G8»).Value = 3
задает управляющей ячейке непредусмотренное
условиями значение и, таким образом, служит
выключателем, которым убираются со схемы все
знаки “+” и восстанавливается цвет проводников
по умолчанию.
Кипение
Аналогичным образом можно
продемонстрировать процесс кипения. Только в
этом случае использованы три управляющие ячейки,
скрытые под кнопкой, в каждой из которых
чередуются 0, 1 или 2.
For p = 0 To 20
Range(«D12»).Value = p Mod 3
Range(«F12»).Value = (p + 1) Mod 3
Range(«E12»).Value = (p + 2) Mod 3
For t = 1 To Tik: Next t
Next p
Range(«D12:F12»).Value = 3
Ячейки, изображающие воду, берут
значения из управляющих ячеек, со сдвигом
относительно друг друга и по слоям. Условное
форматирование для них одинаково: при равенстве
нулю цвет символа белый. Так образуются
“пузырьки”. По умолчанию цвет символов
совпадает с цветом воды, а размер символов
увеличивается от слоя к слою.
Все ячейки, в которых отображаются
скобки “пара”, связаны формулой =ЕСЛИ($D$12=1;»(«;ЕСЛИ($D$12=2;»)»;»»))
с одной из управляющих ячеек, но в каждом слое
правые части равенств в условиях циклически
сдвинуты вдоль кольца 0, 1, 2.
В последней строке, как и в предыдущей
модели, выполняется отключение пузырьков и пара.
Формула оценки, “степень требовательности”
Еще со времен программируемых
калькуляторов “Электроника Б3-34” (не так много
осталось преподавателей информатики, которые
помнят те “добейсиковские” времена, когда он
был единственным техническим средством для
сопровождения учебного пособия для школьников
под редакцией А.П. Ершова и В.М. Монахова) я
использую для оценки знаний при тестировании
следующую формулу:
oc = Int((otv / vop) ^ 2 * 5 + 0.5).
Здесь oc — оценка, vop — количество
заданных вопросов, otv — число правильных ответов,
функция Int(x) — находит целую часть. В данном
случае дробь otv/vop возведена в квадрат для
увеличения “степени требовательности”, так как
таблицу умножения надо знать хорошо. Изменяя
показатель степени (можно использовать и дробные
показатели, например, 1.5), можно регулировать
требовательность.
Достоинство этой формулы еще и в том,
что она позволяет обходиться без операторов
ветвления или выбора. Хотя здесь невелика
премудрость, однако за последние 20 лет мне не
приходилось встречаться с ее использованием в
разработках для контроля знаний.
Таблица умножения
Эту программу для проверки знаний
приходилось воплощать еще на “Электронике Б3-34”.
Почему бы не попробовать в электронных таблицах?
Способ оценивания описан выше, а для
реализации заданий использована событийная
процедура Worksheet_SelectionChange — изменение выбора на
рабочем листе. Первая команда в этой процедуре Range(«AF6:AP16»).Select пресекает всякую
попытку выделить любой другой диапазон или
ячейку, кроме диапазона для ввода ответа.
Множители задаются с помощью генератора
случайных чисел:
Range(«L6»).Value = Int(Rnd(1) * 8 + 2)
Количество вопросов — пока не надоест
или по указанию учителя.
Excel — гуманитарий
Вопрос о возможности использования
электронных таблиц на уроках русского или
иностранного языка обычно вызывает недоумение.
“В одну телегу впрячь не можно коня и трепетную
лань”1, — вот готовый ответ классика. На
первый взгляд здесь противоречия
посущественнее, чем между Моцартом и Сальери,
однако же не будем торопиться с поспешными
выводами, ведь факты — упрямая вещь.
Вот фрагмент рабочего листа, где MS Excel,
выступая в роли учителя начальных классов,
предлагает задания по русскому языку, тщательно
выявляет допущенные ошибки, помечая их в тексте
мигающими маркерами, и выставляет оценку за
работу.
Идея этого проекта довольно проста.
Каждая буква текста занимает одну ячейку. Таким
образом, все знаки обретают свои координаты:
номер строки и номер столбца. Координаты
знакомест для вставки пропущенных букв и их
надлежащие значения сведены в таблицу, которая
вынесена за пределы окна и может быть спрятана
одним из ранее указанных способов.
Макрос в цикле по указанным
координатам читает введенные значения и
сравнивает их с имеющимися правильными ответами.
При расхождении соответствующие ячейки
маркируются.
Понятно, что такого рода упражнения
можно подготовить и для уроков математики и для
других предметов.
Метод последовательных приближений
При создании сложных проектов
неизбежно возрастает объем временных затрат и
число возникающих проблем, в том числе и ошибок.
Правильная организация работы позволяет
существенно сократить время на создание проекта.
Выручает в таких случаях метод последовательных
приближений, который в нашем случае может
включать следующие этапы:
— обдумывание всего проекта и
разбивка его на основные модули;
— выделение в модулях существенных
сторон;
— продумывание и планирование общего
сценария проекта;
— разработка способов управления
проектом;
— тщательная разработка расположения
объектов и элементов;
— разработка дизайна сцены;
— создание и отладка отдельных
макросов;
— оптимизация кода макроса;
— объявление переменных и массивов;
— организация обмена данными между
макросами;
— организация циклов и ветвлений;
— отладка усовершенствованных
макросов;
— внедрение созданных блоков в
основное тело проекта;
— структурирование и комментирование
блоков;
— отладка взаимодействия отдельных
частей и модулей;
— настройка скорости выполнения
отдельных фаз проекта;
— коррекция недочетов.
Поиск оптимального элемента
Проблема развития алгоритмического
мышления и усвоения основ программирования в
современной школе является довольно острой, и
причина здесь не только в сокращении времени на
изучение этой темы. Другим существенным
обстоятельством является то, что, соблазнив
детей прелестями графического интерфейса и
другими мультимедийными чудесами, мы, как бы
обманывая, отбрасываем их назад в прошлый век, в
мрачные QBasic или Pascal, и пытаемся убедить, что вот
так и создаются программы. А так как исходные
тексты профессиональных программ мы показать не
в состоянии, в это тем более трудно поверить. Вот
и приходится слышать: “А зачем нам это старье?”
Кроме того, подбор задач по теме
программирования весьма далек от современных
чудес и не вызывает энтузиазма.
Однако ситуация, на мой взгляд, не
такая безнадежная, и, я думаю, вы уже
догадываетесь о причинах такого оптимизма.
Большинство предлагаемых проектов:
— несложны в реализации и вполне по
силам учащимся основной школы;
— эффективны и привлекательны;
— реализованы в современной среде
программирования;
— позволяют продемонстрировать все
основные структуры и операторы языка
программирования, предусмотренные школьной
программой.
Есть реальная возможность увлечь
детей и поддержать тем самым отечественную школу
программирования.
Однако это не все. Если вы учитель
информатики, то наверняка знаете, как не просто
объяснить детям, чем решение задачи по
математике отличается от решения задачи по
программированию и какова разница между записью
алгоритма и его исполнением.
Некоторые ученики поначалу никак не
могут взять в толк, что для решения им необходимо
играть сразу три роли: программиста, исполнителя
и пользователя, а также чем эти роли отличаются
друг от друга. Особенно трудно дается роль
формального исполнителя, оттого и роль
программиста не удается. Программы работают так
быстро и так скрытно, что обычно не могут
являться иллюстрацией исполнения, вот и
приходится учителю “нарезать” петли на доске,
объясняя реализацию цикла на блок-схеме или иную
премудрость. Не всегда это получается
убедительно.
Попробуем известными уже нам
способами приручить программу и сделать ее не
такой спешной и более наглядной. И чтобы в разных
вариантах: и на Бейсике, и на алгоритмическом
языке, и в виде блок-схемы. Да и чтобы видно было,
что в памяти творится!
А еще, чтобы с ручным управлением:
захотел — остановился, захотел — дальше поехал!!
И чтобы скорость можно было переключать!!!
Сказано — сделано. Милости просим…
В этом эмуляторе в основном
использовалось выделение текста и выделение
ячеек, а также передача сигнала по цепочке. Для
организации цикла, при ручном управлении,
применен оператор выбора. Текст программы
несложно переделать под Pascal, оставив начинку на
VBA.
Графика
Панель рисования
После того как в MS Word освоены
возможности панели рисования, при изучении
электронных таблиц к ней обычно уже не
возвращаются, а потому в сознании многих
рисование и графические иллюстрации в Excel
воспринимаются как нечто непредполагаемое или
излишнее. Это явное заблуждение. Иллюстрирование
документов, заданий, тестов и моделей, созданных
в этом приложении, не ограничивается диаграммами
и графиками. Использование рисунков, схем,
чертежей, формул Microsoft Equation и графических текстов
WordArt делает проекты яркими, красочными,
доходчивыми и привлекательными. А если к этому
добавить анимационные возможности, то эффект
будет многократно выше.
Вы, вероятно, заметили, что некоторые
элементы в предыдущих проектах явно не
текстово-ячеичного происхождения. Правда, они не
несли достаточной серьезной нагрузки и
оставались на вторых ролях. Параллелограмм и
ромб можно было бы создать форматированием
ячеек, но их закраска была бы проблематична.
Далее о динамических эффектах с
использованием графических объектов.
Имена графических объектов
Каждому объекту присваивается свой
порядковый номер создания или внедрения. Если
какие-либо объекты удалялись, порядок
счета не нарушается. Большинство автофигур
(AutoShape) различаются только номером создания, и
обращение к ним производится так:
ActiveSheet.Shapes(«AutoShape 3»). Select — активную плоскую
форму “Автофигуру 3” выделить. Однако
простейшие примитивы: отрезок, прямоугольник,
овал и дуга, — кроме порядкового номера, имеют
свои собственные имена, например: «Line 3»,
«Rectangle 1», «Oval 5», «Arc 7». Для
рисунков используется обращение типа «Picture
4», а для объектов, создаваемых на основе кривых
Безье, — «Freeform 7» (полилиния). Русский
эквивалент можно видеть в окне Имя в самом начале
строки формул, там, где отображаются адреса
активных ячеек и диапазонов, и это нередко
помогает ориентироваться.
При группировке объектов нумерация
вновь создаваемых таким образом объектов
продолжается, и группа уже может именоваться как
«Group 18».
В некоторых случаях необходимо единообразное
именование объектов, присутствующих в вашем
проекте, например, при обращении к объекту в
цикле, тогда можно создать небольшой отрезок и за
каждый из ваших элементов поместить его копию,
сгруппировать образовавшиеся пары и обращаться
к ним как к группе с соответствующим номером.
Однако наиболее простой и эффектный способ
состоит в том, что если вы отбросите “титулы” и в
круглых скобках укажете только порядковый номер
графического объекта, то вас поймут и вам за это
ничего не будет. Так что ActiveSheet.Shapes(3) вполне
приемлемая и универсальная форма обращения к
графическим (да и не только) объектам, в которой
аргумент в скобках может быть переменной целого
типа.
Как обращаться к графическим объектам, не
выделяя их?
Ответ на этот вопрос рассмотрим на
примере:
При записи макроса получили:
ActiveSheet.Shapes(«Rectangle 1»).Select
Selection.ShapeRange.IncrementLeft 80
Selection.ShapeRange.IncrementTop -30
После его преобразования стало:
ActiveSheet.Shapes
(«Rectangle 1»).IncrementLeft 80
ActiveSheet.Shapes
(«Rectangle 1»).IncrementTop -30
Вывод: строку ActiveSheet.Shapes(«Rectangle
1»).Select необходимо удалить, чтобы маркеры
выделения не отвлекали от основного процесса, а в
последующем тексте макроса во всех предписаниях
для изменения свойств этой фигуры текст
Selection.ShapeRange заменить конкретным именем объекта.
Система координат
Положение графических объектов на
листе Excel в VBA отсчитывается от левого верхнего
угла рабочего листа в пикселях, так что при
разрешении экрана 1024 х 768 сцена Excel имеет размеры
734 x 402 рх (при отображении панели рисования и
двухрядном расположении стандартной панели и
панели форматирования) или 734 x 442 рх (при
однорядном расположении и без панели рисования).
Сетка Excel
Панель рисования в MS Excel не совсем та
же, что в MS Word. Здесь в меню Рисование строка Сетка
отсутствует вовсе. Видимо, предполагается
использование сетки Excel.
К сожалению, разработчики MS Excel, по всей
вероятности, не предусматривали такого рода
художеств в этом приложении, поэтому стандартную
сетку невозможно настроить таким образом, чтобы
она служила надежной опорой. Так, по горизонтали
в качестве единицы длины используется ширина
некоего знака, причем, как удалось выяснить в
ходе экспериментов, 100 таким единицам
соответствует примерно 529 пикселей, а шаг
изменения размера сетки, как ни странно,
почему-то выбран равным 1/7 этой единицы! По
вертикали размер вроде бы в пикселях, но
радоваться по этому поводу рано. При более
детальном исследовании выявляется
парадоксальная ситуация: если вы укажете высоту
первой строки равной 400 пикселям, то она
действительно будет иметь такую высоту, однако,
если вы выберете высоту строк 10, то, к своему
изумлению, обнаружите, что на 400 пикселях
спокойно размещается 41 строка! По этой причине, в
случае необходимости надежного ориентирования,
лучше с помощью панели рисования и макроса
создать свою сетку с шагом 10 рх.
Использование других приложений для графики
Как уже было сказано, в MS Excel существуют
проблемы с настройкой сетки, в том числе и в
соответствии с метрической системой. Кроме того,
в электронных таблицах доступное со стандартной
панели увеличение ограничено 200%2. В
некоторых случаях более удобно создавать
иллюстрации к проектам, используя возможности MS
Word, а затем переносить их в свой файл через буфер
обмена. Иногда и возможностей текстового
редактора недостаточно. Так, панель рисования MS
Office не позволяет производить логические
операции над графическими объектами
(пересечение, объединение, вычитание). В этом
случае может выручить импорт графического
объекта из Corel Draw.
Что касается растровых объектов, то
естественно, что все они импортного
происхождения и могут создаваться и
обрабатываться в любом подходящем приложении.
Движение графических объектов
Абсолютное и относительное смещение
Если вы управляете смещением
графических объектов при записи макроса с
помощью клавиш со стрелками или мышью, то ваши
действия в виде макроса будут иметь примерно
следующий вид:
ActiveSheet.Shapes
(«Rectangle 1»).IncrementLeft 5
‘сдвиг влево на 5 пикселей
ActiveSheet.Shapes
(«Rectangle 1»).IncrementTop -30
‘сдвиг вниз на 30 пикселей
ActiveSheet.Shapes
(«Rectangle 1»).IncrementRotation 3
‘поворот на 3 градуса по часовой
стрелке
Для изменения направлений придется
поменять знаки.
Во всех этих случаях использовалось
смещение относительно последнего положения
фигуры (Increment – приращение). Однако этот способ не
всегда удобен, особенно тогда, когда движение
объекта описывается математически. На этот
случай лучше использовать абсолютные координаты
и следующий синтаксис:
ActiveSheet.Shapes.Item(«AutoShape 4»).Left = 100
— а можно и проще:
ActiveSheet.Shapes(«AutoShape 4»).Left = 100
‘абсцисса 100 (в пикселях)
ActiveSheet.Shapes(«AutoShape 4»).Top = Ye
‘ордината Ye (переменная)
ActiveSheet.Shapes(«Group 4»).Rotation = u
‘поворот на угол u(в градусах)
относительно
‘положения в момент создания.
О пользе глупостей
Макросы, использующие перемещение
графических объектов, сразу же после создания
ведут себя “не по-джентльменски”. Вместо того
чтобы плавно пройтись перед вашим взором,
объекты, исполняющие главные роли в макросе,
застывают в оцепенении и, когда вы уже начинаете
терять надежду на возможность изменения
ситуации, вдруг прыгают в конечное положение,
минуя все промежуточные. Заставить отвлечься от
суммирования смещений позволяет включение в
макрос, реализующий движение какого-либо
дополнительного задания, не связанного с данным
графическим объектом. И если в данный момент вам
нечего предложить, допустимы совершенно
“никчемные” поручения типа:
Range(«A1»).Select — выделить и без того
выделенную ячейку;
Range(«A1»).ClearContents — очистить пустую
ячейку;
Range(«A1»).Orientation = 0 — установить
горизонтальную ориентацию текста в пустой
ячейке;
Range(«A1»).HorizontalAlignment = xlCenter —
выровнять отсутствующий текст по центру. Можете
сами пофантазировать на эту тему и выбрать то,
что вам по вкусу. Вроде бы и глупость, а помогает.
В путь!
Вставим рисунок автомобиля, затем,
включив запись макроса, выделим его и, сместив
вправо с помощью клавиатуры, перейдем в ячейку A1.
Остановим запись и отредактируем макрос, чтобы
получилось следующее:
For k = 1 To 160
ActiveSheet.Shapes(«Picture 1»).IncrementLeft 3
Range(«A1»).Select
For t = 1 To Tik / 10: Next t
Next k
Если ваш автомобиль пытается скрыться
за правый край сцены, верните его
перетаскиванием с помощью мыши.
Сила
В следующем проекте проверим
возможность динамического изменения размеров
графических объектов. Нарисуем стрелку из набора
автофигур и, записывая макрос, потянем ее за
правый боковой маркер. Затем отредактируем
макрос, чтобы он приобрел следующий облик:
For k = 1 To 20
ActiveSheet.Shapes(«AutoShape 4»).ScaleWidth 1.1, 0, 0
Range(«A1»).Select
For t = 1 To Tik: Next t
Next k
Следите за номерами объектов (они
скорее всего у вас будут совсем другими) и не
забывайте давать значение переменной Tik.
Здесь в макросе было использовано
масштабирование с коэффициентом 1.1, но можно было
бы задать изменение ширины. В этом случае две
первые строки предыдущей записи могли выглядеть
так:
For w = 30 To 80 Step 3
ActiveSheet.Shapes(«AutoShape 4»).Width = w
Изменение высоты имеет следующий
синтаксис:
ActiveSheet.Shapes(«AutoShape 4»). Height = w
И ширина, и высота отсчитываются от
левого верхнего угла фигуры.
Мяч
Попробуем сочетание двух видов
движения: поступательного и вращательного.
Нарисуем мячик с полоской, сгруппируем и пустим
его по полю с помощью макроса, использующего
цикл:
For i = 1 To 200
ActiveSheet.Shapes(«Group 6»).IncrementRotation 3
ActiveSheet.Shapes(«Group 6»).IncrementLeft 3
Range(«A1»).Select
Next i
Это с использованием относительного
смещения, а теперь немного математики, и в
абсолютных координатах делаем “навесной удар”:
For i = 1 To 200
ActiveSheet.Shapes(«Group 6»).Left = i * 2 + 20
ActiveSheet.Shapes(«Group 6»).Top =
98 + (i — 100) ^ 2 / 50
ActiveSheet.Shapes(«Group 6»).Rotation = i * 3
Range(«A1»).Select
Next i
Мяч, в соответствии с законами
механики, летит по параболе.
Планета
А как обстоят дела с вращением, если
ось проходит не через центр объекта и даже
находится за его пределами?
Один из возможных вариантов
рассмотрим на простом, но достаточно эффектном
примере. Заливкой диапазона изобразим
космическое пространство. В центре поместим
Солнце. Нарисовав планету, создадим ее копию, для
которой выберем: Цвет заливки – Нет заливки, Цвет
линий – Нет линий. Удалив планеты на расстояние,
равное диаметру орбиты, выделим нашу невидимку и
оригинал и сгруппируем. Разместим группу так,
чтобы ее центр пришелся на центр Солнца, и
запустим макрос:
For u = 0 To 360 * 2 Step 5
ActiveSheet.Shapes(«Group 12»).Rotation = u
For t = 1 To Tik: Next t
Range(«A1»).Select
Next u
Если для демонстрации требуется
большее число оборотов, множитель в первой
строке увеличиваем.
Движение тела, брошенного под углом к горизонту
Задача о моделировании движения тела,
брошенного под углом к горизонту, в курсе
информатики стала уже классикой. Тем не менее
попробуем внести в решение этой задачи свою
лепту, используя предлагаемые анимационные
возможности. В результате:
— тело действительно перемещается в
заданной системе координат, причем наглядно
изменяется вектор скорости и его горизонтальная
и вертикальная составляющие;
— длину вектора начальной скорости и
угол его наклона к плоскости горизонта можно
изменять, при этом меняется и траектория полета;
— как в числовой, так и в графической
форме фиксируются координаты максимальной
высоты подъема и дальности полета;
— отражаются текущие параметры
движения тела;
— моменты времени полета можно
изменять вручную как в прямом, так и в обратном
направлении, отслеживая текущие параметры.
При разработке этого проекта пришлось
решать ряд сопутствующих проблем.
Управление движущимся объектом
Пока тело совершает поступательное
или вращательное движение, с описанием этого
процесса особых проблем нет, хотя в первом случае
отсчет координат ведется от левого верхнего угла
прямоугольника, содержащего объект, а поворот
осуществляется относительно центра этого
прямоугольника. Даже изменение размеров
объектов без поворота не создает дополнительных
сложностей. А вот сочетание поворота объекта и
изменения его размеров вносит определенные
трудности в описание его положения, так как при
изменении размеров меняются координаты центра.
Так, пытаясь в макросе увеличить длину
прямоугольника, повернутого на 90o, вы, к
удивлению, обнаружите, что при этом меняются и
его координаты.
Для того чтобы разобраться с этим,
пришлось провести дополнительные исследования в
проекте, о котором упоминалось в разделе Сетка
Excel.
Массив точек
В векторной графике отсутствует
понятие “точка”, но это не означает, что в точках
нет необходимости. Роль точек с успехом
выполняют квадраты со стороной 0,05 см и меньше или
овалы такого же размера без границ. Если точки
являются действующими “героями” сюжета
(например, показывают траекторию движения
объекта), то методом копирования и последующей
вставкой из буфера обмена необходимо создать
массив точек в необходимом количестве. В этом
случае с ним несложно управляться в цикле, а все
незадействованные точки, чтобы были под рукой,
можно “спрятать” под любой из отображаемых
точек или фигур.
Именование ячеек и запись формул в
естественном виде
Одно из несомненных достоинств MS Excel —
богатство математического аппарата, которым не
обладает Visual Basic. Поэтому во всех случаях, где
можно обойтись без макросов в процессе
вычислений, лучше использовать возможности
этого приложения. Кроме того, электронные
таблицы позволяют ячейкам с данными присваивать
собственные имена. Ничто не мешает нам, создавая
ту или иную модель, давать ячейкам, содержащим
переменные, принятые в физике и математике
привычные обозначения. В этом случае формулы
будут выглядеть вполне естественным и понятным
образом.
Ожившие графики
Управление функцией
Построение графиков функций в Excel с
помощью мастера диаграмм вызывает восторг у
детей при изучении этой темы. Демонстрация
использования макросов для построения
динамических графиков и диаграмм вызывает
восхищение не только у учащихся, но и у
преподавателей. Кто из учителей математики не
мечтал о том, как доходчиво и наглядно объяснить
ребятам получение графиков растяжением (сжатием)
вдоль осей координат или параллельным переносом?
Кто из учителей физики не ломал голову над тем,
как убедительно в графической форме
проиллюстрировать развитие того или иного
процесса во времени или динамику зависимости
изменения одной величины от другой?
Возможности для реализации этих
дидактических задач есть, и их предоставляет MS
Excel.
Попробуем построить график функции
у = a · sin x, где а —
параметр.
В ячейку G3 введите
начальное значение параметра а, равное 3,
примените выравнивание по центру и установите
черные, сплошные тонкие внешние границы. В ячейку
G2 поместите имя параметра а,
используя форматирование: выравнивание по
центру, шрифт полужирный, наклонный.
Заполните ячейки рабочего листа в
соответствии с таблицей.
Выделите диапазон A2:A3 и с
помощью маркера автозаполнения введите значения
аргумента x до 5. Затем таким же способом
растяните формулы в ячейках B2 и С2 для ввода
значений функций y1 и y2.
Выделите заполненный диапазон A1:C22, нажмите на кнопку мастера диаграмм на стандартной
панели, выберите тип диаграммы Точечная, Вид как
на рисунке , и нажмите
кнопку Готово. Появятся графики функций y1
и y2.
Кнопкой на панели Visual Basic включите отображение
Элементов управления, выберите Счетчик и нарисуйте в ячейке G5 изображение кнопок счетчика.
Двойным щелчком по Счетчику перейдите в окно Visual
Basic. На панели свойств в строке LinkedCell укажите G4, в строке Max установите значение 60.
Остальные значения не изменяйте.
Вернитесь в MS Excel и в ячейку G3
введите формулу =(G4–30)/10. Отпустите
кнопку Режим
конструктора на панели Visual Basic и попробуйте
нажимать на кнопки счетчика. Значения параметра а
будут меняться, а вместе с ним динамически
будет меняться и график!!!
Включив Режим конструктора,
передвинем счетчик на ячейку G4,
чтобы скрыть связанные значения, и
откорректируем вид кнопок, после чего Режим
конструктора опять отключим.
Для того чтобы не изменялся вид
координатной плоскости при изменениях
параметра, щелкнем правой кнопкой мыши по оси y
на диаграмме и, выбрав Формат оси, выйдем на
вкладку Шкала, где снимем флажки Авто у
минимального и максимального значений, оставив
их равными соответственно –4 и 4.
Остальное форматирование текста и
диаграммы можно сделать в соответствии с
обстоятельствами и вашим вкусом. Ненужные
элементы можно скрыть, а необходимые допечатать
или дорисовать с помощью панели рисования.
На прилагаемом рисунке использован
вариант этого проекта с тремя параметрами.
Рассмотренный способ с успехом можно
использовать для графического решения
параметрических уравнений и задач оптимизации.
Закон Бойля — Мариотта
Попробуем в таблице, на основании
которой построен график, удалить часть
аргументов. Тотчас в графике в соответствующих
местах мы обнаружим прорехи. Причем MS Excel,
несмотря на оставшиеся нетронутыми формулы для
результатов, никак не отреагирует на наши
безобразия какими-либо замечаниями. А что если в
таблице, в которую внесены формулы для
результатов и на основании которой с помощью
мастера диаграмм создано полотно для построения
графика, попробовать вносить аргументы не
методом протягивания (хотя и этот вариант не
отвергается), а с помощью макроса? Вы совершенно
правы: мы действительно получим долгожданное и
желанное динамичное отображение функциональной
зависимости.
Еще немного фантазии, и вот оно
воплощение в проекте:
— поршень плавно скользит в цилиндре;
— изменяются по величине векторы
усилия и давления, уравновешивая друг друга;
— вращается стрелка манометра,
показывая величину давления под поршнем;
— выделяется величина объема газа под
поршнем;
— даже газ густеет и становится менее
прозрачным;
— в динамическом режиме, в
соответствии с изменениями, строятся графики
зависимости объема и температуры от давления;
— изменяются проекции точек графика и
соответствующие им значения величин.
Возможно как автоматическое, так и
пошаговое изменение давления с фиксацией
промежуточных значений величин. В последнем
случае в любой момент направление движения
поршня можно изменить. Проект с успехом можно
использовать как в демонстрационных целях, так и
для выполнения лабораторных и практических
работ.
Другие варианты
Анимация сменой слайдов в различных
графических форматах
Нетрудно проверить, что в электронных
таблицах анимация в форматах GIF и Flash не
поддерживается. Тем не менее не стоит
отчаиваться. Сейчас вы убедитесь, что MS Excel в
области анимации способен “оживить” даже самые
бесперспективные графические форматы, используя
для этого простейший макрос.
В предлагаемом проекте фотографии
Луны в формате PNG (вряд ли кто слышал об анимации в
этом формате) с именами от “Pictures 1” до “Pictures 28”
сложены в одну стопку.
Включим запись макроса и произведем
следующие действия:
— выделим верхний снимок;
— выберем в контекстном меню Порядок;
— укажем в дополнительном меню На
передний план;
— завершим создание макроса.
Оставим в макросе только строку
ActiveSheet.Shapes(«Pictures 1»).ZOrder msoBringToFront
и преобразуем его к виду:
For n = 1 To 28
ActiveSheet.Shapes(n).ZOrder msoBringToFront
Range(«A1»).Select
For T = 1 To Tik*5: Next T
Next n
Фотографии, невзирая на свое
происхождение, “всплывают” друг за другом,
демонстрируя полный цикл смены фаз Луны.
Дополнительный цикл позволит исполнить эту
процедуру неоднократно.
Несложно догадаться, что такому
макросу подвластны все графические форматы: как
растровые, так и векторные. Необходимо только
следить, чтобы при вставке рисунков вы не
нарушали порядок их чередования.
Последовательный переход с одного листа книги
на другой
Технология создания анимации этим
способом следующая:
1. Удаляем все листы книги, кроме
первого. Ему даем короткое имя, например, “1”,
чтобы как можно больше листов было доступно при
редактировании. Имя листа не имеет значения и не
обязательно должно быть коротким. Обращение к
листу в макросе будет производиться по его
индексу, который с именем не связан.
2. Создаем первый кадр сцены со всеми
необходимыми объектами.
3. Используя Правка –
Переместить/скопировать лист…, выбираем в
диалоговом окне (переместить в конец) и отмечаем
флажок Создавать копию. Копии даем имя “2”.
4. На копии производим необходимые
изменения расположения и других свойств
объектов, соответствующих второму кадру.
5. Повторяем пункты 3 и 4 необходимое
число раз, давая соответствующие имена листам.
6. Создаем макрос, последовательно
переключаясь с одного листа на другой, который в
окончательном варианте после редактирования
должен смотреться примерно так:
For i = 1 To 20
Sheets(i).Select
For t = 1 To Tik: Next t
Next i
Не исключен вариант анимации на основе
смены кадров с помощью клавиш и , что на VBA выглядит как:
ActiveWindow.LargeScroll Down := 1
Недостатком этого варианта является
прежде всего более высокая трудоемкость
расположения объектов на каждой новой сцене, а
также отвлекающее мелькание заголовков строк и
полосы прокрутки при исполнении.
Изменение положения камеры
Возможен вариант анимации на основе
использования полос прокрутки, когда создается
эффект плавного изменения положения камеры, а
объекты могут оставаться на месте. Вот пример
макроса, когда камера скользит вниз на 100 строк.
For i = 1 To 100
ActiveWindow.SmallScroll Down := 1
‘смещение на строку
For t = 1 To Tik: Next t
Next i
Чтобы камера смещалась вправо, первую
строку тела цикла необходимо заменить командой
ActiveWindow.SmallScroll ToRight := 1.
Для изменения направления вверх или
влево следует перед единицей поставить знак
“минус”. Не возбраняется использование и
сочетание смещений.
Камера может приближаться или
удаляться за счет изменения масштаба
рабочего листа. В следующем примере камера
отъезжает от сцены:
For i = 100 To 20 Step -1
ActiveWindow.Zoom = i
For t = 1 To Tik: Next t
Next i
Масштаб может изменяться в пределах от
10 до 400%.
Цветовые модели. Сжатие ячеек
Ячейка электронной таблицы может
выступать в роли пикселя и даже в роли составной
части элемента изображения экрана, соответствуя
одному из компонентов системы основных цветов RGB.
Используя эту возможность, нетрудно создать
динамические модели, которые позволяют наглядно
и убедительно продемонстрировать, как
образуется цветовая гамма на CRT- и LCD-мониторах,
сложение цветов в опыте Юнга и колориметре
Максвелла, вычитание цветов в системе CMYK. Кроме
того, динамичное, наглядное преобразование
двоичного представления изображения в
шестнадцатеричное, десятичное и затем в
соответствующие цвета ячеек, с последующим
сжатием ячеек до размера экранной точки,
позволяют эффективно продемонстрировать, что
такое количество отображаемых цветов, глубина
цвета, размер и объем изображения, и как они
связаны между собой. Изменение ширины и высоты
ячеек также фиксируется в макросах, на чем и
основываются предлагаемые проекты. Правда,
возможности Excel в плане использования заливок
ячеек ограничены 56 индексными цветами, поэтому
для полноты цвета в системе RGB можно
воспользоваться заливками векторных
графических объектов типа:
ActiveSheet.Shapes(«Freeform 3»).Fill.ForeColor.RGB =
RGB(255, 0, 0)
Можно задавать цвет и с помощью
индексов, что удобно в циклах, но вот очередной
парадокс от корпорации Microsoft: несмотря на то что
при закраске ячеек и закраске автофигур вы
нажимаете на одни и те же значки и кнопки, тем не
менее одним и тем же индексам будут
соответствовать разные цвета в первом и во
втором случаях, что необходимо учитывать. Кроме
того, количество индексов для закраски автофигур
равно 80, хотя некоторым цветам соответствуют два
индекса, например, красному цвету соответствуют
индексы 2 и 10.
Вот пример закраски ячейки:
Range(«F5»).Font.ColorIndex = 3
‘ цвет текста
Range(«F5»).Interior.ColorIndex = 3
‘ цвет заливки
Range(«F5»).Borders.ColorIndex = 3
»цвет границ
А это закраска прямоугольника:
»цвет заливки
ActiveSheet.Shapes(«Rectangle 1»).Fill. ForeColor.SchemeColor = 2
ActiveSheet.Shapes(«Rectangle 1»).Line. ForeColor.SchemeColor = 10
»цвет границ
Аналогично закрашиваются и объекты
WordArt.
Во всех примерах цвет красный.
Вставка звуков
Не все знают, что приложения MS Office, в
том числе и Excel, способны внедрять, хранить и
воспроизводить звуки в формате wav. Это позволяет
озвучивать создаваемые проекты. Для вставки
звука необходимо в горизонтальном меню выбрать
Вставка – Объект… и на вкладке Новый выбрать
Звукозапись. С помощью появившегося окна утилиты
звукозаписи можно записать комментарий или,
выбрав в меню Правка – Вставить файл…,
произвести вставку мелодии или сообщения. При
этом на рабочем поле появляется значок динамика , а в строке формул:
=ВНЕДРИТЬ(«SoundRec»;»»).
Если сделать двойной щелчок по
динамику, то звук начнет воспроизводиться. Этим
же способом можно создать и макрос для включения
звука.
ActiveSheet.Shapes(«Object 3»).Select
Selection.Verb Verb := xlPrimary
При необходимости значок динамика
можно уменьшить и спрятать за какой-либо
графический объект или управляющую кнопку.
Подведем итоги
Возможно, найдутся скептики, которые
скажут, что для анимации существуют другие
превосходные возможности, например, в том же
Macromedia Flash. Да и офисное приложение Power Point
достаточно просто в использовании и обладает
обширным набором различных динамических
эффектов. Однако даже несмотря на то, что в Power Point
заложен потенциал внедрения объектов MS Excel,
существует обширный круг задач, решаемых в
электронных таблицах, образная динамическая
интерпретация которых может быть использована
не только в дидактических целях. Что же касается
обучения, приведенные примеры, полагаю,
достаточно убедительны, особенно если вы уже
достигли определенных успехов, проверяя
технологию при прочтении, или воспользовались
предлагаемыми файлами, выложенными на сайте inf.1sept.ru.
Несомненно и то, что использование
элементов этой технологии при изучении темы
“Алгоритмизация и основы визуального
объектно-ориентированного программирования”
расширяет круг задач, которые можно предложить
детям, позволяет повысить их заинтересованность
и результативность учебного процесса в целом.
Откройте школьные учебники, будь то физика,
химия, математика или русский язык. Попробуйте
взглянуть на иллюстрации: рисунки, схемы,
графики, таблицы и диаграммы — по-новому,
динамически. Вам откроется необъятное поле
деятельности. Свой законный и довольно обширный
участок на этом поле займут динамические
иллюстрации в приложении MS Excel.
Как видим, Excel (что означает
“превосходный”) открылся нам с новой,
неожиданной стороны и еще раз подтвердил свое
название.
Литература
1. Касьянов В.А. Физика. 10-й класс:
Учебник для общеобразовательных учреждений. 5-е
изд., дораб. М.: Дрофа, 2003, 416 с.: ил.
2. Угринович Н.Д. Информатика и
информационные технологии. Учебник для 10–11-х
классов. М.: БИНОМ. Лаборатория Знаний, 2003, 512 с.: ил.
1 А.С. Пушкин “Полтава” (1829).
2 Указанное в поле масштаба
максимальное значение в 200% сбивает с толку.
Можете попробовать вписать число до 400%.
Действует.
Содержание
- Вариант 1: Добавление границ таблицы
- Вариант 2: Добавление полей листа
- Вариант 3: Создание произвольной рамки
- Вариант 4: Добавление рамки для изображения
- Вопросы и ответы
Вариант 1: Добавление границ таблицы
Чаще всего пользователи заинтересованы в том, чтобы добавить границы для таблицы в Excel. Это тоже можно считать своеобразной настраиваемой рамкой с огромным количеством визуальных параметров. Узнать обо всех них и выбрать подходящий предлагаем в отдельной инструкции на нашем сайте.
Подробнее: Выделение границ таблицы в Excel
Если этот вариант добавления границ для таблицы вас не устраивает, сразу переходите к Способу 3, чтобы разобраться с созданием произвольной рамки, после чего ее можно будет расположить в любом удобном месте.
Вариант 2: Добавление полей листа
Поля листа тоже можно отнести к рамке, но при этом у нее нет цвета оформления, а действие распространяется на весь документ. Подходит такой вариант при завершении подготовки таблицы к печати и необходим в тех случаях, когда установка полей обусловлена требованиями к проекту.
- Для удобства выполнения дальнейших действий рекомендуем сразу перейти к представлению «Разметка страницы».
- В нем откройте вкладку на ленте с таким же названием.
- Разверните меню «Поля» для выбора доступных настроек.
- Используйте стандартный предлагаемый вариант или перейдите в «Настраиваемые поля» для создания собственных настроек.
- Откроется новое окно, где вы можете вручную задать размер полей для каждой стороны листа, а затем применить изменения.
- Проверьте, что получилось, и вернитесь к обычному представлению, если нужно выполнить другое редактирование таблицы. В этом режиме просмотра полей видно не будет, что упростит рабочий процесс.
Вариант 3: Создание произвольной рамки
Произвольная рамка подразумевает добавление к таблице любой из доступных фигур без заливки, но с контуром настраиваемого размера. В будущем такую рамку можно переместить в любое место на листе, чтобы выделить содержимое или придать другое визуальное оформление.
- Все дальнейшие действия производятся на вкладке «Вставка», поэтому сразу же перемещайтесь к ней.
- Разверните блок «Иллюстрации», где находится список доступных геометрических фигур.
- Откройте выпадающее меню «Фигуры».
- В нем найдите одну из подходящих для вас фигур, форму которой должна принять будущая рамка.
- Задайте для нее размер и расположите в удобном месте на таблице.
- Щелкните по фигуре правой кнопкой мыши и откройте меню «Формат фигуры».
- В параметрах отмените заливку, отметив маркером соответствующий пункт.
- Для параметра «Цвет» задайте оттенок рамки.
- Увеличьте ее ширину для более видимого отображения.
- Вернитесь к таблице и перемещайте рамку в необходимое для нее место.
Вместо прямоугольника вы можете выбрать абсолютно любую геометрическую фигуру и убрать заливку, чтобы получить желаемую рамку.
Вариант 4: Добавление рамки для изображения
В завершение разберем принцип добавления рамок для изображения, если вдруг это понадобится сделать. Действия практически схожи с теми, о которых мы говорили при создании произвольного оформления.
- Через ту же вкладку «Вставка» добавьте картинку, если этого не было сделано ранее.
- Выровняйте ее по размеру и выберите место на листе.
- Сделайте правый клик мышкой по изображению и перейдите в меню «Формат рисунка».
- Заливку трогать не нужно, но в разделе «Линия» отметьте маркером пункт «Сплошная линия».
- Подберите для рамки подходящий цвет и ширину линии.
- Результат сразу же отобразится в таблице, с чем вы можете ознакомиться, вернувшись к просмотру картинки.
Еще статьи по данной теме:
Помогла ли Вам статья?
Текущая страница: 15 (всего у книги 22 страниц) [доступный отрывок для чтения: 5 страниц]
Помещение последнего символа ячейки над строкой
Рассматриваемый в данном подразделе трюк позволяет преобразовать последний символ ячейки в верхний индекс. Для этого следует применить макрос, приведенный в листинге 3.65.
Листинг 3.65. Помещение последнего символа над строкой
Sub LastCharUp()
‘ Изменение расположения последнего символа ячейки
With ActiveCell.Characters(Start:=Len(Selection),
Length:=1).Font
.Superscript = True
End With
End Sub
В результате выполнения макроса можно в ячейке вместо значения, например, м3 получить значение м3. При этом следует учитывать, что данный макрос не преобразует числовые значения (например, представление числа 72 не изменится).
Создание нестандартной рамки
Возможности программы позволяют быстро заключить в рамку выделенный диапазон, изменив при этом вид сетки. Для достижения такого эффекта достаточно применить следующий макрос (листинг 3.66).
Листинг 3.66. Нестандартная рамка
Sub ChangeSelGrid()
‘ Оформление границ выделения
‘ Левая граница
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
‘ Правая граница
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
‘ Верхняя граница
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
‘ Нижняя граница
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
‘ Изменение сетки внутри выделения
‘ Вертикальные линии сетки
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = xlAutomatic
End With
‘ Горизонтальные линии сетки
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = xlAutomatic
End With
End Sub
Результат применения макроса показан на рис. 3.20.
На рисунке видно, что диапазон ячеек ограничен рамкой, а сетка внутри его представлена в виде пунктирных линий.
Рис. 3.20. Рамка и сетка
Быстрая вставка фамилий должностных лиц в документ
Трюк, который мы рассмотрим в данном разделе, позволяет быстро вставить в любое место документа определенный заранее текст. Такую возможность удобно использовать, например, для вставки в документ должностей и фамилий директора и главного бухгалтера предприятия (либо других сотрудников). Подобная задача реализуется при использовании макроса, код которого приведен в листинге 3.67.
Листинг 3.67. Вставка текста в документ
Sub InsertCustomText()
‘ Заполнение текущей ячейки
ActiveCell = «Генеральный директор»
Selection.Font.Bold = True
‘ Фамилия на три столбца правее должности
Cells(ActiveCell.Row, ActiveCell.Column + 3).Select
ActiveCell.FormulaR1C1 = «А. Б. Рублев»
Selection.Font.Bold = True
‘ Ячейка с «Главный бухгалтер» на три столбца левее _
и на три строки ниже ячейки с фамилией директора
Cells(ActiveCell.Row + 3, ActiveCell.Column – 3).Select
ActiveCell = «Главный бухгалтер»
Selection.Font.Bold = True
‘ Фамилия на три столбца правее должности
Cells(ActiveCell.Row, ActiveCell.Column + 3).Select
ActiveCell = «Т. С. Копейкин»
Selection.Font.Bold = True
End Sub
После выполнения данного макроса соответствующий текст будет вставлен в том месте документа, где расположен курсор (рис. 3.21).
Рис. 3.21. Вставка текста в документ
Очевидно, что с помощью приведенного выше макроса можно вставлять в текущий документ любой произвольный текст.
Вызов окна настройки шрифта
С помощью небольшого макроса можно вызывать окно настройки параметров шрифта. Код этого макроса выглядит так (листинг 3.68).
Листинг 3.68. Окно настройки шрифта
Sub ShowFontDialog()
‘ Вызов стандартного окна настройки шрифта текущей ячейки
Application.Dialogs(xlDialogActiveCellFont).Show
End Sub
После его выполнения откроется окно Формат ячеек, в котором выполняются необходимые действия. Заданные в данном окне настройки применяются к ячейке, в которой установлен курсор.
Вывод информации о текущем документе
Чтобы быстро вывести на экран информацию об имени текущего файла, названии текущего рабочего листа и количестве листов в текущей рабочей книге, можно использовать макрос, код которого приведен в листинге 3.69.
Листинг 3.69. Информация о текущем документе
Sub ShowInfo()
Dim i As Integer
‘ Выводим имя файла рабочей книги
Range(«A1») = ActiveWorkbook.Name
‘ Выводим имя текущего листа
Range(«B1») = ActiveSheet.Name
‘ Выводим номера листов
For i = 1 To ActiveWorkbook.Sheets.Count
ActiveSheet.Cells(i, 3) = i
Next i
End Sub
Результат выполнения макроса представлен на рис. 3.22.
Рис. 3.22. Информация о текущем файле
В данном случае в ячейке А1 отображается имя текущего файла, в ячейке В1 – имя активного рабочего листа, а в столбце С – информация о количестве рабочих листов в текущей книге.
Вывод результата расчетов в отдельном окне
Выполнив несложный трюк, можно вывести результат расчетов, полученный с помощью формулы, в отдельном информационном окне. Для этого можно создавать самые разнообразные макросы (в зависимости от сложности расчета, содержимого ячеек и формул и т. д.). В листинге 3.70 приведен пример одного из таких макросов.
Листинг 3.70. Окно с результатом расчетов
Sub ResultToWindow()
‘ Переходим на первый лист
Worksheets(1).Activate
‘ Заносим в ячейки данные
Range(«A2») = 5
Range(«A3») = «=A2+3»
‘ Выводим результат расчета
MsgBox Range(«A3»).Formula + » = » + str(Range(«A3»).Value)
End Sub
Результат выполнения данного макроса показан на рис. 3.23.
Рис. 3.23. Формула и результат
Кроме того, после выполнения макроса в ячейке А2 появится значение 5, а в ячейке A3 – 8.
Вывод разрешения монитора
Разрешение монитора просматривается и редактируется в окне свойств экрана (Пуск → Настройка → Панель управления → Экран → Параметры). Однако для просмотра разрешения можно написать соответствующий макрос (листинг 3.71). Чтобы определить разрешение монитора, следует использовать функцию Windows API GetSystemMetrics. В качестве единственного параметра она принимает номер системной настройки, значение которой необходимо узнать (в данном случае 0 – это ширина изображения, 1 – высота). Функция GetSystemMetrics возвращает численное значение запрашиваемого параметра.
Листинг 3.71. Разрешение монитора
‘ Объявление API-функции
Declare Function GetSystemMetrics Lib «user32» _
(ByVal nIndex As Long) As Long
‘ Константы, которые передаются в функцию для определения _
горизонтального и вертикального размеров изображения
Const SM_CXSCREEN = 0
Const SM_CYSCREEN = 1
Sub GetMonitorResolution()
Dim lngHorzRes As Long
Dim lngVertRes As Long
‘ Получение ширины и высоты изображения на мониторе
lngHorzRes = GetSystemMetrics(SM_CXSCREEN)
lngVertRes = GetSystemMetrics(SM_CYSCREEN)
‘ Отображение сообщения
MsgBox «Текущее разрешение: » & lngHorzRes & «x» & lngVertRes
End Sub
После того как запущен макрос (в окне выбора макросов он будет называться GetMonitorResolution), на экране отобразится окно, в котором будет показано текущее разрешение монитора.
Что открыто в данный момент?
При работе с большим количеством рабочих книг иногда возникает необходимость быстро узнать, какие из них открыты в данный момент. Решить эту задачу поможет следующий макрос (листинг 3.72).
Листинг 3.72. Открытые файлы
Sub WorkBooksList()
Dim book As Object
‘ Вывод имени каждой рабочей книги
For Each book In Workbooks
MsgBox (book.Name)
Next
End Sub
После выполнения данного макроса откроется окно с именем текущей рабочей книги. После нажатия в данном окне кнопки ОК в нем будет указано имя другой открытой книги, затем после нажатия ОК – следующей и т. д. Таким образом можно быстро просмотреть названия всех открытых рабочих книг.
Если книга содержит большое количество рабочих листов, то быстро просмотреть их названия можно с помощью следующего макроса (листинг 3.73). Этот макрос отображает названия всех листов текущей рабочей книги.
Листинг 3.73. «Перелистывание» книги
Sub SheetsOfBook()
Dim sheet As Object
‘ Отображение имен всех листов активной рабочей книги
For Each sheet In ActiveWorkbook.Sheets
MsgBox (sheet.Name)
Next
End Sub
После запуска макроса на экране отобразится такое же окно, как при выполнении предыдущего макроса. В нем будет указано название первого рабочего листа текущей книги, а затем, после каждого нажатия кнопки ОК, – названия последующих листов.
Создание бегущей строки
Можно ли в Excel создать бегущую строку? Да, можно, и поможет нам в этом код, приведенный в листинге 3.74.
Листинг 3.74. Создание бегущей строки
Dim intSpacesLeft As Integer ‘ Количество пробелов в начале
строки
Sub Start()
‘ Установка начального количества пробелов
intSpacesLeft = 10
‘ Первый вызов функции бегущей строки
MovingString
End Sub
Sub MovingString()
If intSpacesLeft >= 0 Then
‘ Отображение строки
Range(«A1»).Value = Space(intSpacesLeft) & «Привет!»
intSpacesLeft = intSpacesLeft – 1
‘ Указывем Excel, что данную процедуру нужно вызвать через _
1 секунду
Application.OnTime Now + TimeValue(«00:00:01»),
«MovingString»
End If
End Sub
После запуска макроса Start в ячейке Al будет отображаться бегущая строка с текстом Привет!.
Мигающая ячейка
Рассмотрим достаточно интересный трюк, с помощью которого можно заставить мигать (то есть попеременно изменять цвета) любую ячейку в течение некоторого промежутка времени.
Предположим, что нам необходима ячейка, которая 10 раз каждые 5 секунд будет изменять цвет фона с красного на зеленый. Для решения этой задачи воспользуемся следующим макросом (листинг 3.75).
Листинг 3.75. Мигание ячейки
Sub BlinkingCell()
Static intCalls As Integer ‘ Счетчик количества миганий
‘ Если ячейка мигала менее 10 раз, то изменим _
в очередной раз ее цвет
If intCalls < 10 Then
intCalls = intCalls + 1
‘ Определение, какой цвет необходимо установить
If Range(«A1»).Interior.Color <> RGB(255, 0, 0) Then
‘ Цвет ячейки не красный, так что теперь назначим _
именно красный цвет
Range(«A1»).Interior.Color = RGB(255, 0, 0)
Else
‘ Назначим ячейке зеленый цвет
Range(«A1»).Interior.Color = RGB(0, 255, 0)
End If
‘ Эту процедуру необходимо вызвать через 5 секунд
Application.OnTime Now + TimeValue(«00:00:05»),
«BlinkingCell»
Else
‘ Хватит мигать
Range(«A1»).Interior.ColorIndex = xlNone
intCalls = 0
End If
End Sub
После запуска макроса BlinkingCell будет мигать ячейка Al. Путем внесения соответствующих изменений в приведенный макрос можно регулировать продолжительность цикла и изменять цвета фона по своему усмотрению.
Вращающиеся автофигуры
Можно ли заставить автофигуры вращаться? Оказывается, можно, и это вовсе не так сложно, как кажется на первый взгляд. В этом разделе мы рассмотрим, каким образом можно заставить перемещаться с одновременным вращением сразу две автофигуры.
Для реализации данного трюка нам нужно в первую очередь написать макрос, код которого представлен в листинге 3.76 (этот код нужно поместить в стандартный модуль редактора VBA).
Листинг 3.76. Вращение автофигур
Sub RotatingAutoShapes()
Static fRunning As Boolean
‘ Проверка, выполняется ли уже этот макрос
If fRunning Then
‘ При повторном запуске останавливаем все запущенные макросы
fRunning = False
End
End If
‘ Укажем, что макрос запущен
fRunning = True
Dim cell As Range ‘ Рабочая ячейка
Dim intLeftBorder As Long ‘ Левая граница ячейки
Dim intRightBorder As Long ‘ Правая граница ячейки
Dim intTopBorder As Long ‘ Верхняя граница ячейки
Dim intBottomBorder As Long ‘ Нижняя граница ячейки
Dim alngVertSpeed(1 To 2) As Long ‘ Массивы со значениями
Dim alngHorzSpeed(1 To 2) As Long ‘ горизонтальной и вертикальной
‘ составляющих скоростей
фигур
Dim ashShapes(1 To 2) As Shape ‘ Массив перемещаемых
автофигур
Dim i As Integer
‘ Заполнение массива автофигур
Set ashShapes(1) = ActiveSheet.shapes(1)
Set ashShapes(2) = ActiveSheet.shapes(2)
‘ Заполнение массива скоростей:
‘ для первой фигуры
alngVertSpeed(1) = 3
alngHorzSpeed(1) = 3
‘ для второй фигуры
alngVertSpeed(2) = 4
alngHorzSpeed(2) = 4
‘ Получение границ рабочей ячейки
Set cell = Range(«B2»)
intLeftBorder = cell.Left
intRightBorder = cell.Left + cell.Width
intTopBorder = cell.Top
intBottomBorder = cell.Top + cell.Height
‘ Выполнение вращения и перемещения фигур
Do
‘ Изменение положения каждой автофигуры
For i = 1 To 2
With ashShapes(i)
‘ Контроль достижения правой границы ячейки
If .Left + .Width + alngHorzSpeed(i) >
intRightBorder Then
‘ Корректировка положения
.Left = intRightBorder – .Width
‘ Изменение направления горизонтальной скорости _
на противоположное
alngHorzSpeed(i) = -alngHorzSpeed(i)
End If
‘ Контроль достижения левой границы ячейки
If .Left + alngHorzSpeed(i) < intLeftBorder Then
‘ Корректировка положения
.Left = intLeftBorder
‘ Изменение направления горизонтальной скорости _
на противоположное
alngHorzSpeed(i) = -alngHorzSpeed(i)
End If
‘ Контроль достижения нижней границы ячейки
If .Top + .Height + alngVertSpeed(i) >
intBottomBorder Then
‘ Корректировка положения
.Top = intBottomBorder – .Height
‘ Изменение направления вертикальной скорости _
на противоположное
alngVertSpeed(i) = -alngVertSpeed(i)
End If
‘ Контроль достижения верхней границы ячейки
If .Top + alngVertSpeed(i) < intTopBorder Then
‘ Корректировка положения
.Top = intTopBorder
‘ Изменение направления вертикальной скорости _
на противоположное
alngVertSpeed(i) = -alngVertSpeed(i)
End If
‘ Перемещение автофигуры
.Left = .Left + alngHorzSpeed(i)
.Top = .Top + alngVertSpeed(i)
‘ Вращение автофигуры (изменение направления вращения _
происходит каждый раз при изменении направления _
вертикального перемещения)
.IncrementRotation alngVertSpeed(i)
‘ Даем Excel команду обработать пользовательский ввод
DoEvents
End With
Next
Loop
End Sub
Теперь в ячейке B2 нужно создать две любые автофигуры (перед этим ячейку В2 следует существенно увеличить, сделав ее размером примерно с четверть экрана, чтобы было место для вращения автофигур).
Примечание
Адрес ячейки можно устанавливать любой, но для этого необходимо внести соответствующие изменения в код макроса.
Теперь, запустив созданный макрос, полюбуйтесь результатом своей работы – автофигуры будут вращаться и одновременно перемещаться в пределах указанной ячейки. При желании можно раскрасить автофигуры в разные цвета и установить какой-нибудь фон для ячейки.
Вызов таблицы цветов
При необходимости можно вывести на экран таблицу цветов и соответствующих значений свойства Colorlndex (данное свойство задает индексированный цвет заливки в соответствии с палитрой цветов). Для этого создадим и запустим следующий макрос (листинг 3.77).
Листинг 3.77. Отображение таблицы цветов
Sub ShowColorTable()
Dim intColor As Integer
‘ Формирование заголовка таблицы
Range(«A1»).Value = «Цвет»
Range(«B1»).Value = «Значение свойства ColorIndex»
‘ Вывод таблицы
Range(«A2»).Select
For intColor = 1 To 56
‘ Окрашиваем ячейку столбца «A» в текущий цвет
With ActiveCell.Interior
.ColorIndex = intColor
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
‘ В ячейку столбца «B» вносим индекс текущего цвета
ActiveCell.Offset(0, 1).Value = intColor
‘ Переходим на следующую строку
ActiveCell.Offset(1, 0).Activate
Next
‘ Покажем ячейку «A1» (начало таблицы)
Range(«A1»).Select
ActiveWindow.ScrollRow = 1
End Sub
В результате выполнения макроса откроется таблица, изображенная на рис. 3.24.
Рис. 3.24. Таблица цветов
В столбце А данной таблицы отображается перечень цветов, а в столбце В – соответствующие им значения свойства Colorlndex. На рисунке показан лишь фрагмент таблицы, поскольку полностью она состоит из 56 строк.
Создание калькулятора
Используя средства языка VBA, можно быстро создать простейший калькулятор, предназначенный для вычисления значений арифметических выражений. Пример макроса, который позволяет это сделать, приведен в листинге 3.78.
Листинг 3.78. Создание калькулятора
Sub SimpleCalculator()
Dim strExpr As String
‘ Ввод выражения
strExpr = InputBox(«Что будем считать?»)
‘ Подсчет и вывод результата
MsgBox strExpr & » = » & Application.Evaluate(strExpr)
End Sub
После выполнения данного макроса появится окно, изображенное на рис. 3.25.
Рис. 3.25. Калькулятор
В данном окне с клавиатуры следует ввести выражение, значение которого необходимо вычислить, и нажать кнопку ОК либо клавишу Enter. Результат расчета будет показан в информационном окне (рис. 3.26).
Рис. 3.26. Результат расчета
Если строку макроса strExpr = InputBox («Что будем считать?») написать в виде, например, strExpr = InputBox («Быстрое вычисление»), то окно ввода выражения будет выглядеть, как на рис. 3.27.
Рис. 3.27. Замена текста
Окно результата расчета при этом не изменится (рис. 3.28).
Рис. 3.28. Окно результата расчета
Еще о создании пользовательских меню
Мы уже рассматривали некоторые способы создания пользовательского меню (см. выше раздел «Формирование пользовательского меню»). Предлагаемый же в данном разделе пример является более масштабным, потому что в нем можно увидеть команды созданного меню «в работе» (то есть при выполнении команды на экране отобразится определенный результат).
Сначала рассмотрим создание пользовательского меню, которое полностью состоит из пользовательских команд. После этого реализуем меню, в котором наряду с пользовательскими будут и штатные средства Excel.
Меню с пользовательскими командами
Для реализации данного трюка нам потребуется создать два кода. Один из них будет помещен в модуль ЭтаКнига, а другой – в стандартный модуль. Первый код выглядит следующим образом (листинг 3.79).
Листинг 3.79. Код в модуле ЭтаКнига
Sub Workbook_Open()
‘ Задание имени меню
strMenuName = «MyCommandBarName»
‘ Создание меню
CreateCustomMenu
End Sub
Sub Workbook_BeforeClose(Cancel As Boolean)
‘ Удаление меню перед закрытием книги
DeleteCustomMenu
End Sub
Второй код необходимо набрать в любом стандартном модуле. В нем определяется структура пользовательского меню и порядок его работы. Содержимое данного кода представлено в листинге 3.80.
Листинг 3.80. Код в стандартном модуле
Public strMenuName As String ‘ Имя строки меню
Private cbrcBar As CommandBarControl
Sub CreateCustomMenu()
Dim cbrMenu As CommandBar
Dim cbrcMenu As CommandBarControl ‘ Выпадающее меню «Меню»
Dim cbrcSubMenu As CommandBarControl ‘ Выпадающее меню
«Дополнительно»
‘ Если уже есть пользовательское меню, то оно удаляется
DeleteCustomMenu
‘ Создание меню вместо стандартного
Set cbrMenu = Application.CommandBars.Add(strMenuName,
msoBarTop, _
True, True)
‘ Создание выпадающего меню с названием «Меню»
Set cbrcMenu = cbrMenu.Controls.Add(msoControlPopup, , , ,
True)
With cbrcMenu
.Caption = «&Меню»
End With
‘ Создание пункта меню
With cbrcMenu.Controls.Add(Type:=msoControlButton, _
Temporary:=True)
.Caption = «&Меню1»
.OnAction = «CallMenu1»
End With
‘ Создание пункта меню
With cbrcMenu.Controls.Add(Type:=msoControlButton, _
Temporary:=True)
.Caption = «Меню2»
.OnAction = «CallMenu2»
End With
‘ Создание подменю первого уровня
Set cbrcSubMenu = cbrcMenu.Controls.Add(Type:=msoControlPopup, _
Temporary:=True)
With cbrcSubMenu
.Caption = «Подменю1»
.BeginGroup = True
End With
‘ Создание пункта меню
With cbrcMenu.Controls.Add(Type:=msoControlButton, _
Temporary:=True)
.Caption = «Вкл/Выкл»
.OnAction = «MenuOnOff»
.Style = msoButtonIconAndCaption
.FaceId = 463
End With
‘ Создание пункта меню в подменю первого уровня
With cbrcSubMenu.Controls.Add(Type:=msoControlButton, _
Temporary:=True)
.Caption = «Подменю1»
.OnAction = «CallSubMenu1»
.Style = msoButtonIconAndCaption
.FaceId = 2950
.State = msoButtonDown
End With
‘ Cоздание пункта меню в подменю первого уровня (его состояние _
изменяется посредством пункта «Вкл/Выкл»), для чего сохраним ссылку _
на созданный пункт меню
Set cbrcBar = cbrcSubMenu.Controls.Add(Type:=msoControlButton, _
Temporary:=True)
With cbrcBar
.Caption = «Подменю2»
.OnAction = «CallSubMenu2»
“ Сначала меню деактивировано
.Enabled = False
End With
‘ Создание подменю второго уровня
Set cbrcSubMenu = cbrcSubMenu.Controls.Add(Type:=msoControlPopup, _
Temporary:=True)
With cbrcSubMenu
.Caption = «ПодчПодменю1»
.BeginGroup = True
End With
‘ Cоздание пункта меню в подменю второго уровня
With cbrcSubMenu.Controls.Add(Type:=msoControlButton, _
Temporary:=True)
.Caption = «ПослМеню1»
.OnAction = «CallLastMenu1»
.Style = msoButtonIconAndCaption
.FaceId = 71
.State = msoButtonDown
End With
‘ Cоздание пункта меню в подменю второго уровня
With cbrcSubMenu.Controls.Add(Type:=msoControlButton, _
Temporary:=True)
.Caption = «ПослМеню2»
.OnAction = «CallLastMenu2»
.Style = msoButtonIconAndCaption
.FaceId = 72
.Enabled = True
End With
‘ Отображение меню
cbrMenu.Visible = True
Set cbrcSubMenu = Nothing
Set cbrcMenu = Nothing
Set cbrMenu = Nothing
End Sub
Sub DeleteCustomMenu()
‘ Удаление строки меню
On Error Resume Next
Application.CommandBars(strMenuName).Delete
On Error GoTo 0
End Sub
Sub CallMenu1()
‘ Обработка вызова Меню1
MsgBox «Приветствует меню 1!», vbInformation,
ThisWorkbook.Name
End Sub
Sub CallMenu2()
‘ Обработка вызова Меню2
MsgBox «Приветствует меню 2!», vbInformation,
ThisWorkbook.Name
End Sub
Sub CallSubMenu1()
‘ Обработка вызова Подменю1
MsgBox «Приветствует подменю 1!», vbInformation,
ThisWorkbook.Name
End Sub
Sub CallSubMenu2()
‘ Обработка вызова Подменю1
MsgBox «Приветствует подменю 2!», vbInformation,
ThisWorkbook.Name
End Sub
Sub CallLastMenu1()
‘ Обработка вызова Последнего меню1
MsgBox «Приветствует последнее меню 1!», vbInformation,
ThisWorkbook.Name
End Sub
Sub CallLastMenu2()
‘ Обработка вызова Последнего меню2
MsgBox «Приветствует последнее меню 2!», vbInformation,
ThisWorkbook.Name
End Sub
Sub MenuOnOff()
‘ Активация или деактивация пункта «Меню-Подменю1-Подменю2»
cbrcBar.Enabled = Not cbrcBar.Enabled
End Sub
Чтобы пользовательское меню отобразилось на вкладке Надстройки, необходимо запустить макрос CreateCustomMenu (после написания кода данный макрос будет доступен в окне выбора макросов). Результат представлен на рис. 3.29.
Рис. 3.29. Созданное пользовательское меню
Данное меню работает следующим образом: при выполнении любой его команды появляется окно с соответствующим сообщением (рис. 3.30). Исключение составляет команда Вкл/Выкл – с ее помощью осуществляется включение/выключение пункта Подменю1 → Подменю2.
Рис. 3.30. Результат выбора пункта Меню1
Чтобы вернуться в первоначальное состояние, необходимо воспользоваться макросом DeleteCustomMenu (в некоторых случаях для «отката» нужно закрыть рабочую книгу, затем вновь открыть ее и лишь после этого запустить макрос DeleteCustomMenu). Однако проще сделать по-другому: нужно щелкнуть правой кнопкой мыши на созданном меню и в открывшемся контекстном меню выполнить команду Удалить настраиваемую панель инструментов, после чего подтвердить удаление.