Запуск макроса (процедуры) из кода VBA Excel при изменении значения ячейки вручную или программным способом, а также при нажатии клавиши Delete.
Запуск макроса при изменении ячейки
Пример кода
Код VBA Excel для запуска макроса (процедуры) при изменении значения ячейки на рабочем листе:
Private Sub Worksheet_Change(ByVal Target As Range) If Not Application.Intersect(Range(«A1:D8»), Range(Target.Address)) Is Nothing Then MsgBox «Значение ячейки « & Target.Address & » изменено.» End If End Sub |
Range("A1:D8")
— это диапазон, при изменении значения любой ячейки которого, произойдет выполнение функции MsgBox. Диапазон может состоять из одной ячейки.
Код размещается в модуле рабочего листа, при изменении значения ячейки на котором следует запустить макрос (процедуру).
Вместо функции MsgBox в приведенном коде следует разместить ссылку на исполняемую процедуру (макрос) VBA Excel.
Примечания
- Макрос будет запущен при изменении значения ячейки вручную или программным способом, а также при нажатии клавиши Delete.
- Вызываемая процедура будет запущена и в том случае, если в ячейку будет записано то же самое значение, которое в ней и было. Например, в ячейке было число 28, и в нее записали вручную или программно число 28; или нажали клавишу Delete на пустой ячейке.
- Макрос не будет запущен при изменении значения ячейки с формулой в результате ее пересчета.
Исключение ложного срабатывания
Если в качестве диапазона указать только одну ячейку, можно исключить срабатывание кода VBA Excel при записи в ячейку того же значения. Для этого необходимо использовать переменную уровня модуля, чтобы с ее помощью контролировать факт изменения или неизменения значения в указанной ячейке.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Option Explicit Dim x Private Sub Worksheet_Activate() x = Range(«C4») End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Not Application.Intersect(Range(«A1:D8»), Range(Target.Address)) Is Nothing _ And x <> Range(«C4») Then MyMsgBox x = Range(«C4») End If End Sub Private Sub MyMsgBox() MsgBox «Значение ячейки « & «C4» & » изменено на « & Chr(34) & Range(«C4») & Chr(34) End Sub |
В это примере функция MsgBox вынесена в отдельную процедуру, которая вызывается при изменении значения в ячейке C4.
Значение ячейки C4 присваивается переменной x
при активации рабочего листа и, затем, перезаписывается при каждой перезаписи значения в ячейке.
Код этого примера размещен в модуле рабочего листа, но код вызываемой процедуры может быть вынесен из него в другой модуль.
Обычно в Excel мы можем нажать клавишу F5 или кнопку «Выполнить», чтобы выполнить код VBA. Но пробовали ли вы когда-нибудь запустить конкретный код макроса при изменении значения ячейки? В этой статье я расскажу о некоторых быстрых приемах, которые помогут справиться с этой задачей в Excel.
Запуск или вызов макроса при изменении значения определенной ячейки с кодом VBA
Запуск или вызов макроса при изменении любого значения ячейки в диапазоне с кодом VBA
Запуск или вызов макроса при изменении значения определенной ячейки с кодом VBA
Чтобы запустить код макроса, изменив значение ячейки, следующий код VBA может оказать вам услугу, сделайте следующее:
1. Щелкните правой кнопкой мыши вкладку листа, на которой вы хотите выполнить макрос, если значение ячейки изменится, а затем выберите Просмотреть код из контекстного меню, а в открывшемся Microsoft Visual Basic для приложений окна, скопируйте и вставьте следующий код в пустой модуль:
Код VBA: запускать макрос при изменении значения ячейки:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
Call Mymacro
End If
End Sub
Внимание: В приведенном выше коде A1 это конкретная ячейка, на основе которой вы хотите запустить код, Mymacro это имя макроса, который вы хотите запустить. Пожалуйста, измените их по своему усмотрению.
2. А затем сохраните и закройте окно кода, теперь, когда вы вводите или изменяете значение в ячейке A1, определенный код будет запускаться сразу.
Запуск или вызов макроса при изменении любого значения ячейки в диапазоне с кодом VBA
Если вы хотите запускать или запускать макрос, когда значение какой-либо ячейки изменяется в диапазоне ячеек, следующий код может вам помочь.
1. Щелкните правой кнопкой мыши вкладку листа, на которой вы хотите выполнить макрос, если значение ячейки изменится, а затем выберите Просмотреть код из контекстного меню, а в открывшемся Microsoft Visual Basic для приложений окна, скопируйте и вставьте следующий код в пустой модуль:
Код VBA: запускать макрос при изменении любого значения ячейки в диапазоне:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:B100")) Is Nothing Then
Call Mymacro
End If
End Sub
Внимание: В приведенном выше коде A1: B100 это конкретные ячейки, на основе которых вы хотите запустить код, Mymacro это имя макроса, который вы хотите запустить. Пожалуйста, измените их по своему усмотрению.
2. А затем сохраните и закройте окно кода, теперь, когда вы вводите или изменяете значение в любой ячейке A1: B100, конкретный код будет выполнен сразу.
Статьи по теме:
Как запустить макрос автоматически перед печатью в Excel?
Как запустить макрос на основе значения ячейки в Excel?
Как запустить макрос на основе значения, выбранного из раскрывающегося списка в Excel?
Как запустить макрос, щелкнув гиперссылки в Excel?
Как запустить макрос, когда лист выбран из книги?
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Небольшая памятка по работе с макросами VBA Excel. Для вставки в код, измените название листа и диапазон ячеек на свой.
Добавить текст к значениям (в данном случае добавить слово «add» в начале ячеек):
1 2 3 |
For Each c In Worksheets("list1").Range("F7:F44").Cells c.Value = "add" + CStr(c.Value) Next |
Добавить к значениям текст из соседней ячейки справа:
1 2 3 |
For Each c In Worksheets("list1").Range("F7:F44").Cells c.Value = CStr(c.Value) + " " + c.Cells(1, 2).Value Next |
Вывести строку обрезанную до 6 символов:
1 2 3 |
For Each c In Worksheets("list1").Range("J3:J175").Cells c.Value = Left(c.Value, 6) Next |
Убрать все после первого пробела:
1 2 3 4 5 6 |
For Each c In Worksheets("list1").Range("J3:J175").Cells c.Value = CStr(c.Value) + " " spacePos = inStr(1, c.Value, " ") artLen = spacePos - 1 c.Value = Left(c.Value, artLen) Next |
Убрать все до первого пробела, затем убрать пробелы в начале строки:
1 2 3 4 5 |
For Each c In Worksheets("list1").Range("D2:D79").Cells spacePos = InStr(1, c.Value, " ") c.Value = Mid(c.Value, spacePos) c.Value = LTrim(c.Value) Next |
Если здесь нет нужного вам макроса, посмотрите ещё часть 2.
В Excel множество функций, но некоторые возможности не видны на первый взгляд. Неудивительно, ведь неизвестно, что может пригодиться пользователю, поэтому нет смысла выносить все на основную панель. Часто нужно выполнить какое-то действие при определенном условии, решаемое формулой. Но что, если вам необходимо выполнять действие/макрос при изменении ячейки листа Excel. Это тоже можно сделать при помощи макроса VBA. А как запустить макрос при изменении ячейки?
Чтобы запустить макрос (действие) при изменении данных в ячейке, существует несколько возможностей. Мне больше всего нравится эта конструкция:
Содержание
- Макрос, выполняемый при изменении ячейки
- Как запустить макрос при изменении ячейки?
- Похожие статьи
Макрос, выполняемый при изменении ячейки
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A1")) Is Nothing Then If Target = 0 Then MsgBox "Запустите Ваше действие" End If End If End Sub
Вставьте вместо MsgBox «Запустите Ваше действие» ваш код. Полезные макросы можно посмотреть в этой статье. Для этого макроса если, ячейка А1 становится нулевой, то появляется сообщение (MsgBox) «Запустите Ваше действие».
Как запустить макрос при изменении ячейки?
Сперва включите вкладку Разработчик. Затем пройдите в меню Visual Basic, первый значок слева на картинке (или нажмите Alt+f11):
Важно! Чтобы запустить код типа Worksheet_Change, необходимо записать код не в модуль макроса, а в саму книгу! Подробнее здесь:
Выберите нужную книгу и нужный лист (в примере Лист1), кликнув два раза по листу и в правом окне вставьте код, указанный выше. Если вам нужно, чтобы ваше действие выполнялось, когда ячейка изменяет значение на заполненную, то нужно изменить текст Target = 0 на Target <> 0.
Лично я рекомендую добавить больше условий, при каких действиях будет выполняться ваше действие, чтобы макрос не запускался при любом изменении. Вообще надо быть аккуратным с этой функцией. Бывает и такое — вы забываете, что есть макрос с условиями, а информация изменяется, можно даже не заметить этого
В данном примере описаны макросы для автоматического форматирования или спроса формата для ячеек таблиц Excel средствами VBA.
VBA-макрос: заливка, шрифт, линии границ, ширина столбцов и высота строк
В процессе запыления данных сотрудниками отдела на некоторых листах были изменены форматы ячеек:
Необходимо сбросить форматирование ячеек и сделать так чтобы на всех таблицах планов выполнения работ были одинаковые форматы отображения данных. Формат ячеек для исходной таблицы должен быть закреплен за шаблоном, чтобы можно было сделать сброс и применять заданный стиль оформления в дальнейшем.
Чтобы выполнять такие задачи вручную можно попытаться облегчить процесс настройки множества опций форматирования для многих диапазонов ячеек на разных листах и рабочих книгах. Плюс к о всему можно ошибиться и применить несколько другие настройки форматирования.
Макросы Excel прекрасно справляются с форматированием ячеек на рабочих листах. Кроме того, делают это быстро и в полностью автоматическом режиме. Воспользуемся этими преимуществами и для решения данной задачи напишем свой код VBA-макроса. Он поможет нам быстро и безопасно сбрасывать форматы на исходный предварительно заданный в шаблоне главной таблицы.
Чтобы написать свой код макроса откройте специальный VBA-редактор в Excel: «РАЗРАБОТЧИК»-«Код»-«Visual Basic» или нажмите комбинацию клавиш ALT+F11:
В редакторе создайте новый модуль выбрав инструмент «Insert»-«Module» и введите в него такой VBA-код макроса:
Sub SbrosFormat()
If TypeName(Selection) <> "Range" Then Exit Sub
With Selection
.HorizontalAlignment = xlVAlignCenter
.VerticalAlignment = xlVAlignCenter
.WrapText = True
.Borders.LineStyle = xlContinuous
.Borders.Weight = xlThin
.Font.ColorIndex = xlColorIndexAutomatic
.Interior.ColorIndex = xlColorIndexAutomatic
.Columns.AutoFit
.Rows.AutoFit
End With
End Sub
Теперь если нам нужно сбросить форматирование таблицы на исходный формат отображения ее данных, выделите диапазон ячеек A1:E20 и запустите макрос: «РАЗРАБОЧТИК»-«Код»-«Макросы»-«SbrosFormat»-«Выполнить». Результат работы макроса изображен ниже на рисунке:
Таблица приобрела формат, который определен макросом. Таким образом код VBA нам позволяет сбросить любые изменения формата ячеек на предустановленный автором отчета.
Описание VBA-макроса для формата ячеек таблицы Excel
Первая инструкция в коде, проверяет выделены ли ячейки диапазоном. Если перед выполнением макроса выделил другой элемент листа, например, график, тогда макрос закрывается и дальнейшие инструкции выполняться не будут. В противные случаи будут форматироваться все выделенные ячейки по очереди в соответствии с определенными настройками форматирования:
- Текст в значениях ячеек выравнивается по центру горизонтально и вертикально.
- Включен построчный перенос текста.
- Все границы ячеек получают черную обычной толщины непрерывную линию с черным цветом.
- Сброс цвета шрифта на авто.
- Удаляется любая заливка ячеек.
- Ширина столбцов автоматически настраивается под текст в ячейках.
- Автоматически настроить высоту строк по содержимому ячеек.
Модификация исходного кода макроса для форматирования
Если необходимо сделать так чтобы текст выравнивался не по центру относительно горизонтали, а по правую сторону ячейки, тогда измените константу xlHAlignCenter на xlHAlignRight. Она находиться в свойстве .HorizontalAlignment. Сделайте это следующим образом:
.HorizontalAlignment = xlHAlignRight.
Таким же образом можно выровнять текст по левую сторону изменив значение константы на xlHAlignLeft. Или можно выровнять положение текста по ширине ячейки используя константу xlHAlignJustify.
Чтобы макрос выравнивал текст в ячейках по вертикали к низу, измените строку кода, отвечающую за данную настройку форматирования. Измените константу, которая присваивается к свойству VerticalAlignment в следующий способ:
Если хотите выровнять текс к верху ячейки, тогда воспользуйтесь константой xlHAlignTop.
Если нужно применить для границ ячеек толстую и пунктирную линию в синем цвете, смодифицируйте инструкцию, отвечающую за формат линий:
.Borders.LineStyle = xlDash
.Borders.Color = vbBlue
.Borders.Weight = xlMedium
Описание настройки форматирования для линий границ ячеек. Мы будем получать разные дополнительные типы линий границ если для свойства LineStyle присваивать такие константы:
- xlDoshDot – применяется для рисования пунктирных линий в границах ячеек;
- xlDouble – рисует двойную линию;
- xlHairLine – рисует тонкую линию;
- xlThick – для рисования очень толстой линии.
Для настройки цвета линий Excel предлагает всего 8 констант для определенных цветов. Константы для настройки цвета линий границ для свойства Color:
- vbBlack – черный;
- vbWhite – белый;
- vbRed – красный;
- vbGreen –зеленый;
- vbBlue – синий;
- vbYellow – желтый;
- vbMagenta – алый;
- vbCyan – голубой.
Но при необходимости присвоить линиям границ другие цвета можно вместо константы для свойства Color записать функцию RGB(). Достаточно лишь в аргументе этой функции указать код цвета по шкале от 0 и до 255.
Если нужно применить толстую линию только для границ выделенного диапазона, тогда перед инструкцией End With добавьте следующую строку кода:
.BorderAround xlContinuous, xlMedium, vbBlack
Описание: В первом аргументе для метода BorderAround можно записать также другой стиль линии. Во втором – толщину линии, а в третьем – цвет. Константы, которые можно присвоить в качестве значений для этих аргументов можно использовать те же, которые мы использовали для свойств: LineStyle, Weight, Color.
Если нужно экспонировать первую строку для выделенного диапазона с помощью жирного и курсивного шрифта значений ячеек. А также заполнить ячейки первой строки заливкой с голубым цветом, тогда в самом конце кода макроса перед последней инструкцией End Sub следует добавить несколько строк с VBA-кодом:
.Rows(1).Font.Bold = True
.Rows(1).Font.Italic = True
.Rows(1).Interior.Color = vbCyan
Если хотите присвоить такой же формат для не только для первой строки, но и для первого столбца выделенного диапазона, тогда скопируйте и вставьте ниже эти 3 строчки кода. После в последних трех строках измените свойство Rows на Columns.
.Columns (1).Font.Bold = True
.Columns (1).Font.Italic = True
.Columns (1).Interior.Color = vbCyan
Если нужно задать особенный формат для экспонирования последней строки выделенного диапазона, тогда измените число 1 в аргументе свойства Rows на число всех выделенных строк .Rows.Count. Например, добавьте в конец кода еще такую строку:
.Rows(.Rows.Count).Font.Bold = True
Полная версия модифицированного кода макроса выглядит так:
Sub SbrosFormat()
If TypeName(Selection) <> "Range" Then Exit Sub
With Selection
.HorizontalAlignment = xlVAlignCenter
.VerticalAlignment = xlVAlignCenter
.WrapText = True
.Borders.LineStyle = xlDash
.Borders.Color = vbBlue
.Borders.Weight = xlMedium
.Font.ColorIndex = xlColorIndexAutomatic
.Interior.ColorIndex = xlColorIndexAutomatic
.Columns.AutoFit
.Rows.AutoFit
.BorderAround xlContinuous, xlMedium, vbBlack
.Rows(1).Font.Bold = True
.Rows(1).Font.Italic = True
.Rows(1).Interior.Color = vbCyan
.Columns(1).Font.Bold = True
.Columns(1).Font.Italic = True
.Columns(1).Interior.Color = vbCyan
.Rows(.Rows.Count).Font.Bold = True
End With
End Sub
Пример работы измененного кода VBA-макроса:
В данном примере вы ознакомились с базовыми возможностями форматирования с помощью VBA-макросов. Уверен, что теперь вы сможете самостоятельно найти практическое применение этим исходным кодам.
Уважаемые знатоки, подскажите, пожалуйста, возможно ли задать событие рабочей книги — изменение определеной ячейки, например А1 на 1 листе, при изменении значения которой будет выполняться макрос
Не торопись, и все успеешь намного быстрее
Доброго дня!
Можно сделать так:
— само собой, вот этот код разместить следует в модуле листа:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then ' реакция на изменение в ячейке с координатами A1 _
если нужна другая ячейка, поменяйте координату, _
т.е. вместо "$A$1" впишите любую другую (знак "$" _
обязателен!
'запускаем наш макрос
myMacro
End If
End Sub
а вот этот, можно в стандартном Модуле:
Function myMacro()
MsgBox "Привет!", vbInformation + vbOKOnly, ""
End Function
Путей к вершине — множество. Этот один из многих!
Большое спасибо за отклик, да еще с таким дельным решением
Не торопись, и все успеешь намного быстрее
Удачи!
Путей к вершине — множество. Этот один из многих!
Попрошу вновь подсказку: данный способ срабатывает при редактировании ячейки с клавиатуры, а как описать событие вставки в ячейку значения из буфера обмена?
Не торопись, и все успеешь намного быстрее
Именно для А1 проще всего написать так:
Private Sub Worksheet_Change(ByVal Target As Range)
If Left(Target.Address, 4) = "$A$1" Then myMacro
End Sub
а вот если это не А1, а другая ячейка, то такая штука может и не прокатить.
Скажи мне, кудесник, любимец ба’гов…
Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995
Огромное спасибо. Теперь все заработало. Как же приятно учиться у таких знающих людей
Не торопись, и все успеешь намного быстрее
Цитата: _Boroda_ от 30.08.2010, 17:51
Именно для А1 проще всего написать так:Private Sub Worksheet_Change(ByVal Target As Range)
If Left(Target.Address, 4) = "$A$1" Then myMacro
End Sub
а вот если это не А1, а другая ячейка, то такая штука может и не прокатить.
согласен, но, если сделать так:
Private Sub Worksheet_Change(ByVal Target As Range)
dim nR as long
dim nC as integer
nR=target.row
nC=target.column
If nR = 4 and nC= 2 and target = "Вася" Then myMacro
End Sub
то myMacro сработает лишь тогда, когда в ячейку B4 активного листа будет введено кодовое слово «Вася».
или же выбор с вариациями:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim nR As Long
Dim nC As Integer
nR = Target.Row
nC = Target.Column
If nR = 4 And nC = 2 Then
Select Case Cells(nR, nC).Text
Case "Вася", "Миша"
myMacro1
Case "Петя"
myMacro2
Case Else
MsgBox "Ничего не буду делать!", vbInformation + vbOKOnly, "Сообщение системы:"
End Select
End If
End Sub
Путей к вершине — множество. Этот один из многих!
Доброго дня, уважаемые знатоки!
У меня родился вопрос в продолжение данной темы. Уважаемый Gwolf предложил отличный вариант написания кода для решения данной задачи. Но у меня немного сложнее задача.
Суть в следующем: у меня есть файл в Листе1 указан некий справочник в котором перечислены Города, Сети (названия сетевых магазинов), Магазины этой сети и еще несколько столбцов. Задача у меня следующая: В Листе2 пользователь должен последовательно выбирать данные в каждом из столбцов (допустим, с помощью «списка вариантов», последовательность столбцов аналогичная), исходя из того какой он выбрал город в столбце Сеть ему должны быть предложены только те варианты которые есть в данном городе и аналогично с магазином (только те магазины, которые есть в данной сети).
Например: пользователь выбрал город Актау в столбце Город, далее ему нужно заполнить столбец Сеть. В данном столбце ему предлагаются сетевые магазины только данного города, а не из всего списка (и без повторений как у меня). Затем в следующем столбце он выбирает магазин, который есть только в данной сети.
Подскажите, пожалуйста, как это реализовать? При этом чтобы была возможность дополнять список магазинов и сетей.
Заранее благодарю!
Путей к вершине — множество. Этот один из многих!
GWOlf, вот файл с примером
Sl131 в интернете поищите «зависимые выпадающие списки» посмотрите для общего развития.
Посмотрите приложенный скриншот. Обвел плюсик который следует нажать
Путей к вершине — множество. Этот один из многих!
Благодарю, Gwolf!
Уже приложил файл двумя постами выше!
Доброго дня, господа знатоки!
Я к Вам все с тем же вопросом и просьбой о помощи.
Есть файл с листом «Магазины» (файл приложил) в котором перечислены города, менеджеры, название сетей магазинов и сами магазины. Так вот, я пытался написать макрос, который бы в столбцах С и D листа «MPV» позволял бы выбирать только те магазины, которые есть в выбранном регионе. Для данных столбцов (С и D) написан макрос облегчающий поиск нужного магазина который вызывается правой клавишей мыши (он ссылается на лист «Справочник» столбцы с I по K).
Но как бы я не извращался моих знаний по программированию не хватает.
Помогите, пожалуйста, исправить этот макрос таким образом, чтобы пользователь в столбцах С и D мог выбирать только те магазины, которые есть в данном регионе.
Буду Вам очень признателен за помощь.
Тема: Выполнение макроса при изменении определенной ячейки
Вопрос: выбирать только те магазины, которые есть в данном регионе
Вы ничего не перепутали? Второй Ваш вопрос здесь тоже не по теме.
Не нужно превращать тему в свалку вопросов только потому, что они связаны Вашей задачей.
Давайте не запутывать тех, кто пользуется поиском. Создайте новую тему с назвнием, отражающим суть проблемы.
Добрый вечер Всем.
Пользовался вот этим вариантом запуска макроса(от Boroda),за что ему большое спасибо.
Private Sub Worksheet_Change(ByVal Target As Range)
If Left(Target.Address, 4) = "$A$1" Then Макрос1
End Sub
Но если в ячейке А1 стоит формула,то запуск макроса не происходит.
Как это можно исправить?
Спасибо.
Здравствуйте
Трудно что-то ответить на ваш вопрос.
Скорее всего вы перепутали понятия «пересчет значения ячейки» и «изменение значения ячейки»
Рекомендую создать отдельный топик, приложить файл, как того требуют правила, и тогда можно будет вам чем-то помочь