Сложный макрос
«Писать макросы не сложно, сложно писать красивые макросы»
Джон Уокенбах
Консультант Microsoft
по проектированию электронных таблиц
Довольно часто приходится копировать данные из одного рабочего листа в другой. Давайте с помощью макроса постараемся автоматизировать этот процесс.
Синхронизация двух листов в файле Excel
Откроем файл Excel и запустив запись макроса, скопируем из листа Лист1 любую ячейку в лист Лист2.
Теперь давайте откроем код для редактирования: Сервис – Макрос – Макросы … где должно появиться окошечко с вашими записанными макросами. Выделите редактируемый Макрос и нажмите Изменить
Вы перейдёте в режим редактирования VBE (Visual Basic Editor). Это специализированный и достаточно навороченный редактор VBA. Не стоит его бояться, слева должна появиться панель (на подобии Проводника) с имеющимися разделами (модулями).
Нас в принципе интересуют разделы с названиями Module1 и тд. В этих модулях хранится код VBA. Наверху имеется название VBA-проекта (в скобочках название файла Excel) у нас это (Macros2.xls). Нажмём на этот модуль Module1.
Перед вами должен появится программный код VBA, давайте разбираться:
Sub Макрос2 () оператор Sub это начало программы, мы говорим VBA, что хотим что-то создать. Макрос2 это название нашего макроса, его можно переименовать.
‘ Макрос2 Макрос все записи, которые имеют перед собой знак ‘ являются комментариями в программе и не исполняются. Таким образом, скажем можно прокомментировать своё действие Selection.Copy ’ Копируем выбранную ячейку. Или даже временно заблокировать целую строчку программного кода. Всё, что окрашивается зелёным цветом – это комментарии.
Range (“G2”).Select Мы выделяем ячейку G2 на активном листе.
Selection.Copy Копируем эту выделенную ячейку в память компьютера (в буфер обмена).
Sheets(“Лист1”) .Select Находим и выделяем лист Лист1
Range (“Н10”).Select На выделенном листе Лист1 выделяем ячейку Н10
ActiveSheet.Paste На выделенном листе Лист1 вставляем в ячейку Н10 данные из буфера.
End Sub Сообщаем VBA о нашем желании завершить программу.
Вот так наши действия записал компьютер в VBA-код. Так как Лист, из которого нужно копировать данные не указан (указана только ячейка G2), VBA будет копировать ячейку G2 из любого листа, в Лист 1 в ячейку H10.
Естественно, что этот код можно грамотно подредактировать и изменить по своим желаниям.
Синхронизация двух файлов Excel.
В качестве примера, скопируйте на жёсткий диск и откройте (одновременно) два файла:
(Данный пример находится в файле Macros2.xls в Module2)
Sub Bridge ()’ Начало программы Bridge
‘ Макрос удалённого доступа
Windows("Test.xls").Activate’ Выбираем файл из которого будем копировать ячейку
Sheets("Лист1").Select’ Выбираем лист в этом файле
'Range("A1").Select’ Можем выбрать определённую ячейку. Если заблокировать строку – будет выбрана ячейка, которая изначально выделена на листе.
Selection.Copy’ Копируем ячейку
Windows("Macros2.xls").Activate’ Выбираем файл в который будем копировать ранее скопированную ячейку
Sheets("Лист 2").Select’ Выбираем лист в этом файле
'Range("A1").Select’ Выбираем фиксированную ячейку, которая будет постоянна для вставки. Если заблокировать строку – будет выбрана ячейка, которая изначально выделена на листе.
ActiveSheet.Paste’ Вставляем значение
End Sub’ Завершаем программу
Суть этой программки в следующем: мы из открытого файла Test.xls копируем выделенную ячейку на листе Лист 1 в файл Macros2.xls на лист Лист 2
Записав этот макрос, не забудьте присвоить ему комбинацию клавиш для запуска:
Сервис – Макрос – Макросы …
Выбираем Параметры … и вписываем букву для комбинации (в нашем случае это q).
Теперь при нажатии комбинации клавиш Ctrl + q , у нас из файла Test.xls копируется выделенная ячейка в файл Macros2.xls (естественно эти файлы должны быть открыты и рабочие листы чётко прописаны).
Можно украсить свою программу. Скопируйте в файл Macros2.xls любую картинку (в примере уже имеется кнопка) и выделив эту картинку правой кнопкой мыша выберите опцию Назначить макрос … После чего откроется список макросов – выберите один из них. Теперь нажимая на заветную кнопочку, вы автоматически будете запускать этот макрос. Естественно, с этой кнопкой можно выполнять различные манипуляции: делать надписи, раскрашивать, растягивать и тд.