Новости:

Теперь на форум можно залогиниться / зарегистрироваться с помощью ВКонтакте. Уже существующие пользователи могут связать свою учетную запись с аккаунтом ВКонтакте одним кликом в профиле пользователя http://forum.msexcel.ru/index.php?action=profile;area=account

Главное меню

Выполнение макроса при изменении определенной ячейки

Автор sergo44441, 24.08.2010, 22:32

« назад - далее »

sergo44441

Уважаемые знатоки, подскажите, пожалуйста, возможно ли задать событие рабочей книги - изменение определеной ячейки, например А1 на 1 листе, при изменении значения которой будет выполняться макрос
Не торопись, и все успеешь намного быстрее

GWolf

#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


Путей к вершине - множество. Этот один из многих!

sergo44441

#2
Большое спасибо за отклик, да еще с таким дельным решением
Не торопись, и все успеешь намного быстрее

GWolf

Путей к вершине - множество. Этот один из многих!

sergo44441

Попрошу вновь подсказку: данный способ срабатывает при редактировании ячейки с клавиатуры, а как описать событие вставки в ячейку значения из буфера обмена?
Не торопись, и все успеешь намного быстрее

_Boroda_

Именно для А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

sergo44441

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

GWolf

Цитата: _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

Путей к вершине - множество. Этот один из многих!

Sl131

Доброго дня, уважаемые знатоки! :)
У меня родился вопрос в продолжение данной темы. Уважаемый Gwolf предложил отличный вариант написания кода для решения данной задачи. Но у меня немного сложнее задача.
Суть в следующем: у меня есть файл в Листе1 указан некий справочник в котором перечислены Города, Сети (названия сетевых магазинов), Магазины этой сети и еще несколько столбцов. Задача у меня следующая: В Листе2 пользователь должен последовательно выбирать данные в каждом из столбцов (допустим, с помощью "списка вариантов", последовательность столбцов аналогичная), исходя из того какой он выбрал город в столбце Сеть ему должны быть предложены только те варианты которые есть в данном городе и аналогично с магазином (только те магазины, которые есть в данной сети).
Например: пользователь выбрал город Актау в столбце Город, далее ему нужно заполнить столбец Сеть. В данном столбце ему предлагаются сетевые магазины только данного города, а не из всего списка (и без повторений как у меня). Затем в следующем столбце он выбирает магазин, который есть только в данной сети.
Подскажите, пожалуйста, как это реализовать? При этом чтобы была возможность дополнять список магазинов и сетей.

Заранее благодарю!

GWolf

Цитата: Sl131 от 02.12.2015, 11:56... немного сложнее задача ...
В принципе, решение уже Вам предложено. Если хотите большей детализации, то выложите файл примера.
Путей к вершине - множество. Этот один из многих!

Sl131

#10
GWOlf, вот файл с примером

cheshiki1

Sl131 в интернете поищите "зависимые выпадающие списки" посмотрите для общего развития.

GWolf

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

Sl131

Благодарю, Gwolf!
Уже приложил файл двумя постами выше!

Sl131

Доброго дня, господа знатоки!
Я к Вам все с тем же вопросом и просьбой о помощи.
Есть файл с листом "Магазины" (файл приложил) в котором перечислены города, менеджеры, название сетей магазинов и сами магазины. Так вот, я пытался написать макрос, который бы в столбцах С и D листа "MPV" позволял бы выбирать только те магазины, которые есть в выбранном регионе. Для данных столбцов (С и D) написан макрос облегчающий поиск нужного магазина который вызывается правой клавишей мыши (он ссылается на лист "Справочник" столбцы с I по K).
Но как бы я не извращался моих знаний по программированию не хватает.
Помогите, пожалуйста, исправить этот макрос таким образом, чтобы пользователь в столбцах С и D мог выбирать только те магазины, которые есть в данном регионе.
Буду Вам очень признателен за помощь.