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

' pseudocode    
While Sheet1 is open
        When a dropdown value is changed in column B
            Call Update
        End When
End While

Я нашел несколько ссылок в Интернете, но не совсем понимаю. В этих ссылках есть код, относящийся к Target. Является ли Target именованным диапазоном? Мне не повезло с их реализацией. Я думаю, что эти ссылки могут дать ответ на мою проблему.
http://www.mrexcel.com/forum/ excel-questions / 95341-running-macro-continuous.html
http://msdn.microsoft.com /en-us/library/office/ff839775(v=office.15).aspx

Благодарность

2
alfonso 29 Апр 2014 в 18:19

2 ответа

Лучший ответ

Вы можете использовать макрос события рабочего листа:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rB As Range
    Set rB = Range("B:B").Cells.SpecialCells(xlCellTypeAllValidation)
    If Intersect(Target, rB) Is Nothing Then
    Else
        Application.EnableEvents = False
            Call Update
        Application.EnableEvents = True
    End If
End Sub

Поскольку это код рабочего листа, его очень легко установить и использовать автоматически:

  1. щелкните правой кнопкой мыши имя вкладки в нижней части окна Excel
  2. выберите View Code - откроется окно VBE
  3. вставьте материал и закройте окно VBE

Если у вас есть какие-либо проблемы, сначала попробуйте на пробную версию.

Если вы сохраните книгу, макрос будет сохранен вместе с ней. Если вы используете версию Excel более поздней, чем в 2003 году, вы должны сохранить файл как .xlsm, а не .xlsx

Чтобы удалить макрос:

  1. вызвать окна VBE, как указано выше
  2. очистить код
  3. закройте окно VBE

Чтобы узнать больше о макросах в целом, смотрите:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

А также

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

Чтобы узнать больше о макросах событий (код листа), см .:

http://www.mvps.org/dmcritchie/excel/event.htm

Макросы должны быть включены, чтобы это работало!

4
TylerH 10 Ноя 2017 в 20:59

Вам понадобится событие Worksheet_Changed, подобное этому:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Column("B")) Is Nothing Then
        Application.EnableEvents = False
        Call Update
        Application.EnableEvents = True
    End If
End Sub

Это сработает, если в столбце B будут внесены какие-либо изменения. Цель задается событием приложения и представляет собой диапазон, в котором было внесено изменение.

Изменить: вам нужно будет поместить это в код листа, а не в модуль. Если щелкнуть правой кнопкой мыши вкладку листа в нижней части экрана Excel, одним из вариантов является просмотр кода.

1
Rachel Hettinger 30 Апр 2014 в 16:42