Remkomplekty.ru

IT Новости из мира ПК
3 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Запуск макроса при изменении ячейки excel

автоматическое выполнение макроса Excel при изменении ячейки

как я могу автоматически выполнять макрос Excel при каждом изменении значения в определенной ячейке?

прямо сейчас, мой рабочий код:

здесь «H5» отслеживается ли конкретная ячейка и Macro — это имя макроса.

есть ли лучший способ?

5 ответов

ваш код выглядит довольно хорошо.

будьте осторожны, однако, для вызова Range(«H5») ярлык команду Application.Range(«H5») , что эквивалентно Application.ActiveSheet.Range(«H5») . Это может быть хорошо, если единственными изменениями являются пользовательские изменения, что является наиболее типичным, но возможно, что значения ячеек листа изменятся, когда он не является активным листом с помощью программных изменений, например VBA.

имея это в виду, я хотел бы использовать Target.Worksheet.Range(«H5») :

или вы можете использовать Me.Range(«H5») , если обработчик событий находится на кодовой странице для рассматриваемого рабочего листа (обычно это так):

надеюсь, что это помогает.

обработки Worksheet_Change или Workbook_SheetChange событие.

обработчики событий принимают аргумент «Target As Range», поэтому вы можете проверить, включает ли изменяющийся диапазон интересующую вас ячейку.

Я предпочитаю этот способ, не через ячейку, а диапазон

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

1) откройте редактор VBA в разделе Проект VBA (YourWorkBookName.xlsm) откройте объект Microsoft Excel и выберите лист, к которому будет относиться событие изменения.

2) представление кода по умолчанию — » General.»Из выпадающего списка в верхней середине выберите » рабочий лист.»

3) Private Sub Worksheet_SelectionChange уже существует, как и должно быть, оставьте его в покое. Скопируйте / вставьте код Майка Розенблюма сверху и измените его .Диапазон ссылки на ячейку, за которой вы наблюдаете для изменения (B3, в моем случае). Однако не размещайте свой макрос (я удалил слово «макрос» после «тогда»):

или из выпадающего списка в левом верхнем углу выберите «Изменить» и в пространстве между Private Sub и конец Sub, вставить If Not Intersect(Target, Me.Range(«H5»)) Is Nothing Then

4) в строке после «затем» отключите события, чтобы при вызове макроса он не запускал события и не пытался снова запустить этот Worksheet_Change в бесконечном цикле, который аварийно завершает работу Excel и / или иным образом все портит:

5) назовите макрос

6) включите события, чтобы следующее изменение (и любые/все другие события) вызвало:

7) завершите блок If и Sub:

это принимает включение/выключение событий из модулей, которые создают проблемы и просто позволяет триггеру изменения, отключает события, запускает макрос и снова включает события.

У меня есть ячейка, которая связана с онлайн-базой данных и часто обновляется. Я хочу запускать макрос всякий раз, когда значение ячейки обновляется.

Я считаю, что это похоже на изменение значения ячейки программой или любым внешним обновлением данных, но выше примеры почему-то не работают для меня. Я думаю, проблема в том, что внутренние события excel не запускаются, но это моя догадка.

Запуск макроса кликом по ячейке или при изменении значения ячейки

Как сделать связанный выпадающий список в «Эксель», зависящий от значения в соседней ячейке.

рассказывалось о том, как реализовать в программе Excel связанные между собой выпадающие списки. Недавно создавая файл со связанными списками столкнулся с проблемкой — при обновлении записи в первой ячейке, от которой зависит список во второй, вторая ячейка остается неизменной, не обнуляет значения.

Решил исправить ситуацию и сделать так чтобы при клике по первой ячейке вторая ячейка принимала значение «пусто».

Для этого потребовалось написать 2 коротеньких алгоритма (макроса):

Первый макрос — производит удаление данных из ячейки и выглядит следующим образом:

Sub noll()
On Error Resume Next
ActiveSheet.Cells(2, 2).Value = «»
End Sub

Этот макрос следует записать в поле раздела «module» — в «контейнер» модуля.

Второй макрос — активирует первый при клике по ячейке.

Выглядит код вызывающий (запускающий ) макрос по клику на ячейку, следующим образом:

Private Sub Worksheet_SelectionChange (ByVal Target As Range)
Dim u As String
On Error Resume Next
If Not Intersect(Target, Range(«B1»)) Is Nothing Then
Call noll
End If
End Sub

Этот код нужно записывать не в контейнер «module», а непосредтвенно в лист. Для этого следует в меню разработчика в просмотре кода:

  • Кликнуть двойным щелчком по названию листа.
  • После двойного клика будет открыто поле для внесения кода аналогичное полю модуля (module).

После записи макроса проблемка была решена, но мне не очень понравилось, что вторая ячейка обнулялась при любом выделении или клике по первой ячейке.
Поэтому я решил поправить код вызова макроса и изменил его таким образом, чтобы макрос активировался не при клике на ячейку, а при ее изменении.

Код стал выглядеть следующим образом:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim u As String
On Error Resume Next
If Not Intersect(Target, Range(«B1»)) Is Nothing Then
Call noll
End If
End Sub

Теперь макрос стал запускаться только при изменении первой ячейки, например, при выборе нового значения из выпадающего списка.

Вопросы и пожелания можете оставлять в комментариях или на форуме нашего сайта.
Видео о работе в excel можно найти на нашем youtube канале по ссылке:

Запуск макроса

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

Читать еще:  Как остановить макрос в excel

Существует несколько способов запуска макроса в Microsoft Excel. Макрос — это действие или набор действий, с помощью которых можно автоматизировать различные задачи. Макросы записываются на языке программирования Visual Basic для приложений. Вы всегда можете запустить макрос, нажав команду макросы на вкладке разработчик на ленте. В зависимости от того, как назначено выполнение макроса, вы можете запустить его с помощью сочетания сочетание клавиш, нажав кнопку на панели быстрого доступа или в настраиваемой группе на ленте либо щелкнув объект на рисунке. или элемент управления. Кроме того, вы можете запускать макросы автоматически при открытии книги.

Перед запуском макроса

Прежде чем приступить к работе с макросами, включите вкладку разработчик .

В Windowsперейдите в раздел Параметры _Гт_ файла _гт_ настроить ленту.

Для Macперейдите на вкладку _Гт_ параметры Excel. _гт_ ленты _амп_ Toolbar.

Затем в разделе Настройка ленты в разделе Основные вкладкиустановите флажок разработчик и нажмите кнопку ОК.

Откройте книгу, содержащую нужный макрос.

На вкладке Разработчик в группе Код нажмите кнопку Макросы.

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

Кроме того, у вас есть и другие варианты:

Options (параметры ) — добавить сочетание клавиш или описание макроса.

Пошаговые действия . редактор Visual Basic откроется в первой строке макроса. Нажимая клавишу F8 , вы сможете пошагово прокручивать код макроса по одной строке за раз.

Изменить — откроется редактор Visual Basic, и вы сможете изменить код макроса по мере необходимости. После внесения изменений вы можете нажать клавишу F5 , чтобы запустить макрос из редактора.

Вы можете добавить сочетание сочетаний клавиш в макрос при его записи, а также добавить его в существующий макрос.

На вкладке Разработчик в группе Код нажмите кнопку Макросы.

В поле имя макроса выберите макрос, который вы хотите назначить сочетанию клавиш.

Нажмите кнопку Параметры.

Откроется диалоговое окно Параметры макроса.

В поле сочетание клавиш введите прописные или строчные буквы, которые вы хотите использовать с сочетанием клавиш.

Для Windowsсочетание клавиш для прописных букв — CTRL + Letter. Для прописных букв — сочетание клавиш CTRL + SHIFT + Letter.

Для Macсочетание клавиш для строчных букв — Option + Command + Letter, но сочетание клавиш CTRL + буква также будет работать. Для прописных букв — сочетание клавиш CTRL + SHIFT + Letter.

Будьте внимательны при назначении сочетаний клавиш, так как они будут переопределять любые эквивалентные клавиши Excel по умолчанию, пока открыта книга, содержащая макрос. Например, если назначить макросу сочетание клавиш Ctrl + z, вы потеряете возможность его отмены. Поэтому рекомендуется использовать сочетание клавиш CTRL + SHIFT + прописной буквы , например сочетание клавиш Ctrl + Shift + Z, которое не имеет эквивалентного сочетания клавиш в Excel.

Список сочетаний клавиш , которые уже назначены в Excel, можно найти в статье сочетания клавиш и функциональные клавиши в Excel.

Введите описание макроса в поле Описание.

Нажмите кнопку ОК, чтобы сохранить изменения, а затем — кнопку Отмена, чтобы закрыть диалоговое окно Макрос.

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

Вы можете создать настраиваемую группу, которая будет отображаться на вкладке ленты, а затем назначить ей кнопку в этой группе. Например, вы можете добавить настраиваемую группу с именем «Мои макросы» на вкладку «Разработчик», а затем добавить в нее макрос (выводится как кнопка). Для этого выполните действия, описанные в разделе Назначение макроса кнопке.

Запуск макроса щелчком области графического объекта

Вы можете создать активную область на рисунке, на котором пользователи смогут запускать макросы.

На листе вставьте графический объект, например рисунок, или нарисовать фигуру. Распространенный сценарий состоит в том, чтобы нарисовать фигуру скругленного прямоугольника и отформатировать ее таким образом, чтобы она выглядела как кнопка.

Чтобы узнать, как вставить графический объект, ознакомьтесь со статьей Добавление, изменение и удаление фигур.

Щелкните созданную область правой кнопкой мыши и выберите команду назначить макрос.

Выполните одно из следующих действий.

Чтобы назначить графический объекту существующий макрос, дважды щелкните его или введите его имя в поле имя макроса .

Чтобы записать новый макрос для назначения выделенному графическому объекту, нажмите кнопку запись, введите имя макроса в диалоговом окне запись макроса , а затем нажмите кнопку ОК , чтобы начать запись макроса. Завершив запись макроса, нажмите кнопку остановить запись на вкладке разработчик в группе код .

Совет: Вы также можете нажать кнопку остановить запись в левой части строки состояния.

Чтобы изменить существующий макрос, щелкните его имя в поле имя макроса , а затем нажмите кнопку изменить.

Нажмите кнопку ОК.

На вкладке разработчик нажмите кнопку Visual Basic, чтобы запустить Редактор Visual Basic (VBE). Найдите в окне проекта модуль, содержащий макрос, который нужно запустить, и откройте его. Все макросы в этом модуле будут перечислены на правой панели. Выберите макрос, который вы хотите запустить, разместите курсор в любом месте макроса, нажмите клавишу F5или в меню выберите команду запустить _гт_ запустить макрос.

Создание события Воркбук_опен.

В следующем примере событие Open используется для запуска макроса при открытии книги.

Откройте или создайте книгу, в которую нужно добавить макрос.

Читать еще:  Interop excel dll

На вкладке Разработчик в группе Код нажмите кнопку Visual Basic.

В окне » Обозреватель проектов » щелкните правой кнопкой мыши объект ThisWorkbook и выберите пункт Просмотреть код.

Совет: Если окно проекта не отображается, в меню вид выберите пункт проводникпо проектам.

В списке объектов , расположенном над окном кода, выберите пункт Книга.

В результате будет автоматически создана пустая процедура для события Open , например:

Private Sub воркбук_опен ()

Добавьте в процедуру следующие строки кода

Private Sub воркбук_опен ()
MsgBox Date
(«Лист1»). Range («a1»). Value = Дата
окончания подзадачи

Переключитесь на приложение Excel и сохраните данную книгу как книгу с поддержкой макросов (.XLSM).

Закройте и снова откройте книгу. После повторного открытия книги Excel запускает процедуру воркбук_опен , которая отображает текущую дату в окне сообщения.

В окне сообщения нажмите кнопку ОК.

Примечание: Ячейка a1 на листе Sheet1 также включает в себя дату, полученную в результате выполнения процедуры Воркбук_опен.

Дополнительные сведения

Вы всегда можете попросить эксперта в сообществе Excel, получить техническую поддержку в сообществе Answersили предложить новую функцию или улучшение в голосовом пользователе Excel .

Как создавать, изменять и выполнять макросы в Excel

С помощью макросов можно существенно повысить эффективность обработки и работы с информацией в Эксель благодаря тому, что множество одинаковых действий, которые мы вынуждены повторять, можно оформить в виде специального кода, который возьмет эту заботу на себя. В данном статье мы рассмотрим, каким образом можно создать новый макрос, а также, как изменить существующий.

Создание макросов

В Эксель создать макросы можно вручную или автоматически. Последний вариант предполагает запись действий, которые мы выполняем в программе, для их дальнейшего повтора. Это достаточно простой способ, пользователь не должен обладать какими-то навыками кодирования и т.д. Однако, в связи с этим, применить его можно не всегда.

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

Метод 1: Записываем макрос в автоматическом режиме

Чтобы иметь возможность записать макросы автоматически, для начала нужно их активировать в параметрах Эксель.

Узнать, как это можно сделать, можно в нашей статье – “Как включать и отключать макросы в Excel”.

После того, как макросы включены, можно перейти к нашей основной задаче.

  1. Переключаемся во вкладку “Разработчик”. В группе инструментов “Код” щелкаем по значку “Записать макрос”.
  2. На экране появится окошко, в котором мы можем выполнить настройки записи. Здесь указывается:
    • имя макроса – любое, но должно начинаться с буквы (не с цифры), не допускаются пробелы.
    • комбинация клавиш, которая будет использоваться для запуска макроса. Обязательной является Ctrl, а вторую мы можем назначить в специальном поле. Допустим, пусть это будет клавиша “r”. Если нужно использовать заглавную букву, нужно зажать клавишу Shift, которая будет добавлена в сочетание клавиш.
    • место хранения макроса. Стандартно – это будет текущая книга, но, если требуется, можно выбрать новую книгу или личную книгу макросов. В нашем случае оставляем стандартный вариант.
    • При желании можно добавить описание к макросу.
    • По готовности кликаем OK.
  3. Теперь в созданный макрос будут записываться все действия, которые мы будем выполнить в книге. И так до тех пор, пока мы не остановим запись.
  4. Допустим, давайте давайте в ячейке D2 выполним умножение двух ячеек (B2 и B3): =B2*B3 .
  5. После того, как выражение готово, нажимаем клавишу Enter, чтобы получить результат. Затем останавливаем запись макроса, нажав на значок “Стоп” (появилась вместо кнопки “Записать макрос”) в группе инструментов “Код”.

Запускаем выполнение макроса

Чтобы проверить работу записанного макроса, нужно сделать следующее:

  1. В той же вкладке (“Разработчик”) и группе “Код” нажимаем кнопку “Макросы” (также можно воспользоваться горячими клавишами Alt+F8).
  2. В отобразившемся окошке выбираем наш макрос и жмем по команде “Выполнить”.Примечание: Есть более простой вариант запустить выполнение макроса – воспользоваться сочетанием клавиш, которое мы задали при создании макроса.
  3. Результатом проверки будет повторение ранее выполненных (записанных) действий.

Корректируем макрос

Созданный макрос можно изменить. Самая распространенная причина, которая приводит к такой необходимости – сделанные при записи ошибки. Вот как можно отредактировать макрос:

  1. Нажимаем кнопку “Макросы” (или комбинацию Ctrl+F8).
  2. В появившемся окошке выбираем наш макрос и щелкаем “Изменить”.
  3. На экране отобразится окно редактора “Microsoft Visual Basic”, в котором мы можем внести правки. Структура каждого макроса следующая:
    • открывается с команды “Sub”, закрывается – “End Sub”;
    • после “Sub” отображается имя макроса;
    • далее указано описание (если оно есть) и назначенная комбинация клавиш;
    • команда “Range(“…”).Select” возвращает номер ячейки. К примеру, “Range(“B2″).Select” отбирает ячейку B2.
    • В строке “ActiveCell.FormulaR1C1” указывается значение ячейки или действие в формуле.
  4. Давайте попробуем скорректировать макрос, а именно, добавить в него ячейку B4 со значением 3. В код макроса нужно добавить следующие строки:
    Range(«B4»).Select
    ActiveCell.FormulaR1C1 = «3»
  5. Для результирующей ячейки D2, соответственно, тоже нужно изменить начальное выражение на следующее:
    ActiveCell.FormulaR1C1 = «=RC[-2]*R[1]C[-2]*R[2]C[-2]» .Примечание: Обратите внимание, что адреса ячеек в данной строке (ActiveCell.FormulaR1C1) пишутся в стиле R1C1.
  6. Когда все готово, редактор можно закрывать (просто щелкаем на крестик в правом верхнем углу окна).
  7. Запускаем выполнение измененного макроса, после чего можем заметить, что в таблице появилась новая заполненная ячейка (B4 со значением “3”), а также, пересчитан результат с учетом измененной формулы.
  8. Если мы имеем дело с большим макросом, на выполнение которого может потребоваться немало времени, ручное редактирование изменений поможет быстрее справиться с задачей.
    • Добавив в конце команду Application.ScreenUpdating = False мы можем ускорить работу, так как во время выполнения макроса, изменения на экране отображаться не будут.
    • Если потребуется снова вернуть отображение на экране, пишем команду: Application.ScreenUpdating = True .
  9. Чтобы не нагружать программу пересчетом после каждого внесенного изменения, в самом начале пишем команду Application.Calculation = xlCalculationManual , а в конце – Application.Calculation = xlCalculationAutomatic . Теперь вычисление будет выполняться только один раз.
Читать еще:  Excel vba копирование файлов

Метод 2: создание макроса вручную

Опытные пользователи Эксель в некоторых случаях предпочитают создавать макросы от начала до конца полностью вручную . План действий следующий:

  1. Во вкладке “Разработчик” нажимаем на значком “Visual Basic” (группа инструментов “Код”).
  2. В результате, на экране появится уже знакомое окно, которое мы рассмотрели выше.
  3. Здесь создается макрос и пишется ее код – полностью вручную.

Заключение

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

Макросы в Excel

Большинство специалистов, работающих с электронными таблицами, изо дня в день составляют свои отчеты, выполняя одни и те же действия. Несмотря на то, что это занимает у них не так много времени, так как все происходит уже на «автомате», все же можно уменьшить в разы трудозатраты, освободив значительную часть рабочего времени под другие задачи либо отдых.

Приложение Excel умеет записывать все действия пользователя с помощью макрорекодера, создавая специальную программу на языке программирования Visual Basic for Application (VBA), которую в последующем можно запустить для исполнения. При этом Вам не нужно быть программистом или иметь специальное образование.

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

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

В принципе, автоматизировать процессы в случаях, описанных выше, можно, но потребуются знания логических конструкций языка VBA, но это тема другой статьи, относящейся к программированию. На данном этапе можно посоветовать разделить одну большую задачу на несколько мелких и определить, какие из них могут быть записаны, а какие следует выполнять самостоятельно.

Подготовка к созданию макроса

В связи с тем, что макросы в Excel записывают все действия пользователя (выделение ячеек, скроллинг таблицы, копирование и т.п.), то изначально требуется продумать все шаги, которые Вы хотите автоматизировать.

В качестве примера создадим простой макрос, задающей ячейке наш стиль. Определим какие шаги надо выполнить:

  • Установить шрифт;
  • Задать заливку;
  • Задать границы.

Больше никаких действий мы не должны производить. Если мы начнем запись макроса с выделения какого-либо диапазона, то при последующих запусках будет выделяться именно он, что не соответствует нашей цели.

Запись макроса

Теперь произведем саму запись. Выделите любую ячейку, которой необходимо задать стиль (это может быть любая ячейка, главное не меняйте ее во время записи). Перейдите на вкладку «Вид», найдите область «Макросы». Раскройте меню, кликнув по стрелочке, и выберите пункт «Запись макроса». Не обращайте внимание на появившееся окно, его параметры будут рассмотрены дальше, просто нажмите кнопку «OK».

Установите границы, цвет заливки, курсивное начертание текста и шрифт Times New Roman. Остановите запись, используя то же меню. Сейчас там должен находиться пункт «Остановить запись», – выберите его.

Запуск макроса и назначение горячих клавиш

После остановки макрорекодера, протестируйте работу нового макроса. Для этого кликнете по пиктограмме «Макросы» на ленте вкладки «Вид». Должно появиться следующее окно со списком все макросов открытых книг:

Нажмите кнопку «Выполнить». Выделенный диапазон должен поменять свое оформление на то, которое Вы определили во время записи.
Если запускать процедуру придется часто, то есть смысл назначить ей горячие клавиши. Кликните кнопку «Параметры» в том же окне. На экране появиться такой диалог:

  • Имя макроса – его поменять здесь нельзя. Это возможно сделать только в коде записанной процедуры.
  • Сочетание клавиш – укажите один символ того языка, в раскладке которого чаще приходиться работать, так как, например, сочетания Ctrl + q и Ctrl + й являются разными, но находятся на одной клавише. Так же имеет значение регистр символа. Если указать символ «Й», то горячими клавишами будет служить сочетание Ctrl + Shift + й.
  • Описание – служит памяткой тому, кто записал макрос, и пояснением остальным.

Все выше указанные параметры можно задать при запуске макрорекодера.

Изменение макроса

Для редактирования записанных процедур требуются знания языка VBA, но в этом разделе все же рассмотрим простейший пример, чтобы понять сам принцип.

Отобразите окно с макросами, выберите любой из имеющихся и нажмите кнопку «Изменить». Программа Вас перенаправит в редактор Visual Basic в модуль с кодом выбранного макроса. Если Вы точно следовали статье, то на экране должен быть приблизительно следующий скрипт (зеленый текст, расположенный после апострофа, является комментарием и не выполняется программой):

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

Дополните Ваш код в соответствии с нижеприведенным образцом:

Запустите макрос и убедитесь, что внизу страницы появилось наше сообщение:

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

Ссылка на основную публикацию
Adblock
detector