СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до 23.06.2025

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

VBA в Excel. Событие листа

Категория: Информатика

Нажмите, чтобы узнать подробности

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

Просмотр содержимого документа
«VBA в Excel. Событие листа»

Событие листа
Worksheet_SelectionChange

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

Заходим в окно VB, нажимая Alt+F11. Слева мы видим названия наших листов. Щёлкаем двойным щелчком по желаемому листу. Вверху имеется два окошка в которых по умолчанию написано General иDeclarations.

Выбираем в левом окне Worksheets, а в правом SelectionChange.

После этого появится следующая запись кода:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)


End Sub

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

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Selection.Interior.ColorIndex = 5

End Sub

то какой бы мы диапазон не выделили на этом листе, он окрасится в синий цвет.

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

Рассмотрим ещё один пример, в котором будет выделяться всегда только одна ячейка на листе - активная ячейка (в видеоролике показано как это работает).

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

ActiveCell.Select

End Sub

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

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

a = ActiveCell.Column

If a

MsgBox "Курсор находится на столбце №" & a & " - это меньше 10.", _

vbInformation, "Пример"

Else

MsgBox "Курсор находится за пределами моего понимания!", _

vbInformation, "Пример"

End If

End Sub

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



Событие листа
Worksheet_SelectionChange

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

Заходим в окно VB, нажимая Alt+F11. Слева мы видим названия наших листов. Щёлкаем двойным щелчком по желаемому листу. Вверху имеется два окошка в которых по умолчанию написано General иDeclarations.

Выбираем в левом окне Worksheets, а в правом SelectionChange.

После этого появится следующая запись кода:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)


End Sub

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

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Selection.Interior.ColorIndex = 5

End Sub

то какой бы мы диапазон не выделили на этом листе, он окрасится в синий цвет.

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

Рассмотрим ещё один пример, в котором будет выделяться всегда только одна ячейка на листе - активная ячейка (в видеоролике показано как это работает).

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

ActiveCell.Select

End Sub

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

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

a = ActiveCell.Column

If a

MsgBox "Курсор находится на столбце №" & a & " - это меньше 10.", _

vbInformation, "Пример"

Else

MsgBox "Курсор находится за пределами моего понимания!", _

vbInformation, "Пример"

End If

End Sub

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

Событие листа
Worksheet_Change

Рассмотрим событие, которое возникает при редактировании ячейки. Т.е. мы внесли какие-то данные в ячейку, вышли из режима редактирования и при этом у нас сразу сработал какой-то макрос.
Делается это следующим образом. Заходим в окно VB, щёлкаем слева по листу, событие которого хотим отслеживать. Открывается окно. В левом верхнем окошке выбираем пункт Worksheet и правом окошкеChange.

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

Private Sub Worksheet_Change(ByVal Target As Range)


End Sub

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

Stolbec = Target.Column

Stroka = Target.Row

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

Private Sub Worksheet_Change(ByVal Target As Range)

Stolbec = Target.Column

Stroka = Target.Row

MsgBox "Отредактирована ячейка Cells(" & Stroka & "," & Stolbec & ")", _

vbInformation, "Пример"

End Sub

Рассмотрим такой пример когда, после редактирования ячейки, её текст автоматически закрашивается в синий цвет, а ячейка окрашивается в жёлтый цвет.

Private Sub Worksheet_Change(ByVal Target As Range)

Target.Font.ColorIndex = 5 'синий

Target.Interior.ColorIndex = 6 'жёлтый

End Sub

И всё бы ничего, отредактировали ячейку, потом выпполнился какой-то макрос. Но вот беда если записать такой макрос, то мы загрустим:

Private Sub Worksheet_Change(ByVal Target As Range)

Target.Cells = "Привет"

End Sub

А загрустим потому, что мы будем заносить в изменённую ячейку какие-то данные. То-есть мы опять её редактируем. Следовательно, как только макрос заносит данные в ячейку, он снова запускает сам себя. И у нас получается зацикливание. Для того чтобы этого не происходило используют дополнительную запись, которая блокирует запуск события в момент выполнения текущего.

Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False

Target.Cells = "Привет"

Application.EnableEvents = True

End Sub

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





Событие листа. Двойной щелчок мыши.
BeforeDoubleClick

Иногда охото сделать программу, которая приближается к настоящей, где всякие события происходят от нажатия двойного щелчка мыши. В этом занятии я расскажу как сделать макрос, который будет реагировать на двойной щелчок ЛКМ.

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

 

Делается это следующим образом. Заходим в окно VB, щёлкаем слева по необходимому листу. Открывается окно. В левом верхнем окошке выбираем пункт Worksheet, а правом окошке BeforeDoubleClick.

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

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)


End Sub

Если в этот код поместить какое-нибудь информационное сообщение, то при двойном щелчке по ячейке, будет появляться это сообщение.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

MsgBox "Вы совершили двойной клик!", vbInformation, "Пример"

End Sub

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

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

Cancel = True

MsgBox "Вы совершили двойной клик!", vbInformation, "Пример"

End Sub

Cancel = True может принимать только два значения True или False и об этом указано в наименовании макроса Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean).

Но такая запись активизирует двойной щелчёк на всём листе, и это конечно хорошо, но иногда возникает потребность задействовать только часть листа, например только столбец А. На этом этапе мы уже начинаем придумывать какие-то условия. И это можно осуществить всё при помощи того же If ... End If или Select Case ... End Select.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If ActiveCell.Column = 1 Then

Cancel = True

MsgBox "Вы совершили двойной клик!", vbInformation, "Пример"

End If

End Sub

При такой записи сообщение будет появляться только в том случае, если мы щёлкаем мышкой по столбцу А.

Усложним пример. Сделаем так, как показано в начале урока на левом рисунке. Попробуем Установить галочки, причём не во всём столбце, а в некотором диапазоне, например В2:В8. Ниже приведён макрос, который может это осуществить.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Not Intersect(Target, Range("B2:B8")) Is Nothing Then

Target.Font.Name = "Marlett"

Cancel = True

If Target = "a" Then

Target.Interior.ColorIndex = 23

Target = ""

Else

Target = "a"

Target.Interior.ColorIndex = 6

End If

End If

End Sub

Теперь самое время пояснить его составляющие.

If Not ... Is Nothing Then - если производится действие в указанном диапазоне, то выполняем условие. Другими словами, если ячейка, по которой произвели двойной щелчок, попадает в диапазон В2:В8, то выполняем макрос дальше после слова Then;

Intersect(Target, Range("B2:B8")) - это указывает переменную, которая должна принимать участие в диапазоне В2:В8, т.е. пересекаться в этом диапазоне, в данном случае это изменяемая ячейка;

Target.Font.Name = "Marlett" - устанавливаем имя шрифта в ячейке, который и отвечает за галочку;

If Target = "a" Then ... - если в редактируемой ячейке стоит галочка, то убираем её и закрашиваем ячейку в синий цвет. В противном случае устанавливаем галочку и закрашиваем ячейку в жёлтый цвет.

Ту же самую функцию можно осуществить через другую запись:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

St = Target.Column

Sk = Target.Row

If St = 2 And Sk 1 And Sk

Target.Font.Name = "Marlett"

Cancel = True

If Target = "a" Then

Target.Interior.ColorIndex = 23

Target = ""

Else

Target = "a"

Target.Interior.ColorIndex = 6

End If

End If

End Sub

Тут диапазон задаётся при помощи координат столбца и строки, а также обычных логических операторов.

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

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

Правая кнопка мыши.
BeforeRightClick

Рассмотрим событие, которое возникает при нажатии на правую кнопку мыши. Иногда просто необходимо сделать так, чтобы заблокировалось меню появляющееся при нажатии на правую кнопку мыши. Или охото сделать своё меню. Именно это мы сегодня и изучим.

Делается это следующим образом. Заходим в окно VB, щёлкаем слева по листу, событие которого хотим отслеживать. Открывается окно. В левом верхнем окошке выбираем пункт Worksheet и правом окошкеBeforeRightClick.

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

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)


End Sub

И если в этот макрос вставить какое-нибудь информационное сообщение, то при нажатии на правую кнопку мыши на заданном листе, нам отобразится оно.

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

MsgBox "Вы нажали на ПКМ", vbInformation, "Пример"

End Sub

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

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

Cancel = True

MsgBox "Вы нажали на ПКМ", vbInformation, "Пример"

End Sub

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

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

Cancel = True

a = ActiveCell.Column

Select Case a

Case 1

ActiveCell.Interior.ColorIndex = 3

Case 2

ActiveCell.Interior.ColorIndex = 4

Case 3

ActiveCell.Interior.ColorIndex = 5

Case 4

ActiveCell.Interior.ColorIndex = 6

Case 5

ActiveCell.Interior.ColorIndex = 7

Case Else

ActiveCell.Interior.ColorIndex = xlNone

End Select

End Sub

В данном примере показано, что в зависимости от того куда Вы поставите курсор и нажмёте на правую кнопку мыши, ячейка примет окрас в зависимости от номера столбца. Тут рассмотрены только первые 5 столбцов листа. Всё что дальше 5 столбца, при нажатии на ПКМ будет обесцвечиваться.

Если выполнить вот такую запись:

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

Cancel = True

End Sub

то правая кнопка мыши просто напросто не будет "работать", то-есть меню не будет появляться.

Добавление своего раздела в меню правой кнопки мыши

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

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

Dim a As Object

For Each a In Application.CommandBars("cell").Controls

If a.Tag = "brccm" Then a.Delete

Next a

With Application.CommandBars("cell").Controls.Add(Type:=msoControlButton, _

before:=1, temporary:=True)

.Caption = "Окрасить ячейку"

.OnAction = "cvet1"

.Tag = "brccm"

End With

With Application.CommandBars("cell").Controls.Add(Type:=msoControlButton, _

before:=2, temporary:=True)

.Caption = "Обесцветить ячейку"

.OnAction = "cvet0"

.Tag = "brccm"

End With

End Sub

При выборе "Окрасить ячейку", выделенный диапазон заливается синим цветом. При нажатии на "Обесцветить ячейку", выделенный диапазон ячеек обесцвечивается.
Работу данного кода можно посмотреть на "Листе 3" в примере. На видеоролике так же можно посмотреть его работу.

Создание своего собственного меню.
Как убрать стандартные команды в меню правой кнопки мыши?

А сейчас я покажу другой вариант создания меню - более разумный.
Создадим своё собственное меню, со своими командами, и которое работает только в нашей книге.
Для этого воспользуемся дополнительными событиями для книги - это Workbook_Activate() иWorkbook_Deactivate().

Теперь разберём последовательность создания такого меню. Добавим в книгу новый модуль, на который разместим два макроса - NewMenu и MakroPrivet.

Option Explicit

Sub NewMenu()

Dim Contro As Object

'Удаление Всех пунктов меню

For Each Contro In CommandBars("Cell").Controls

CommandBars("Cell").Controls(Contro.Caption).Delete

Next

'СОздаём новое меню

CommandBars("Cell").Controls.Add.Caption = "Новое меню"

With CommandBars("Cell").Controls("Новое меню")

.OnAction = "MakroPrivet"

.FaceId = 263

End With

End Sub




Sub MakroPrivet() 'Макрос, который воплняется при нажатии

MsgBox "Привет!", vbExclamation, "Привет"

End Sub

NewMenu - это макрос формирующий новое меню.
For Each... - это цикл, который перебирает все имеющиеся пункты в стандартном меню и удаляет их.
CommandBars("Cell").Controls.Add.Caption = "Новое меню" - при помощи этой команды мы создаём новый пункт меню с названием "Новое меню".
With CommandBars("Cell").Controls("Новое меню")... - Настраиваем параметры кнопки нового меню
.OnAction = "MakroPrivet" - это имя макроса, который сработает при нажатии на меню.
.FaceId = 263 - это "прибамбас" картинка, которая находится левее названия нашего меню "Новое меню".

MakroPrivet - как было указано выше, это макрос, который выполняется при нажатии на новое меню.
MsgBox "Привет!"... - сообщение, которое появляется при выполнении кода нового меню.

Теперь сделаем так, чтобы меню правой кнопки появлялось только при активации нашей книги. Т.е. если мы переключимся на другую книгу, то меню будет стандартное.
Для этого в окне VB щёлкаем слева по пункту "ЭтаКнига". Открывается окно. В левом верхнем окошке выбираем пункт Workbook и правом окошке Activate.

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

Private Sub Workbook_Activate()


End Sub

Вставим в этот макрос ссылку на макрос NewMenu, который находится в созданном модуле.

Private Sub Workbook_Activate()

NewMenu

End Sub

теперь при активации книги будет срабатывать макрос NewMenu, который и будет формировать наше новое меню.

Но тут есть один нюанс. При отткрытии ещё одного Excel-евского документа, не закрывая нашу книгу, в открытом документе будет появляться наше меню, что не желательно. Ведь мы хотим создать меню, которое будет работать только в нашей книге, а не в какой-то другой параллельно открытой. Чтобы такого не происходило добавим в нашу книгу макрос, который будет сбрасывать меню правой кнопки в настройки по умолчанию, при переключении пользователя на другую книгу.
Для этого в окне VB щёлкаем слева по пункту "ЭтаКнига". Открывается окно. В левом верхнем окошке выбираем пункт Workbook и правом окошке Deactivate

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

Private Sub Workbook_Deactivate()

Application.CommandBars("Cell").Reset

End Sub

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

Событие листа

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





Рассмотрим событие, которое возникает при активации листа. Делается это следующим образом. Заходим в окно VB, щёлкаем слева по необходимому листу. Открывается окно. В левом верхнем окошке выбираем пункт Worksheet, а правом окошке Worksheet_Activate.

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

Private Sub Worksheet_Activate()


End Sub

Если в этот код поместить какое-нибудь информационное сообщение, то при активации листа (например перейдти на лист 2, а затем опять на лист 1), нам будет появляться это сообщение (Пример: Лист 1).

Private Sub Worksheet_Activate()

MsgBox "Вы перешли на следующий уровень!", vbInformation, "Пример"

End Sub

Worksheet_Deactivate


Рассмотрим событие, которое возникает при деактивации листа, т.е. когда мы уходим с него. Делается это следующим образом. В левом верхнем окошке выбираем пункт Worksheet, а правом окошкеWorksheet_Deactivate.

После этого появится следующие начало и конец макроса, который и отвечает за уход с листа - деактивацию.

Private Sub Worksheet_Deactivate()


End Sub

Если в этот код поместить какое-нибудь информационное сообщение, то при уходе с активного листа, нам будет появляться сообщение (Пример: Лист 2).

Private Sub Worksheet_Deactivate()

MsgBox "Вы покинули лист!", vbInformation, "Пример"

End Sub

Worksheet_Calculate

Рассмотрим событие, которое возникает при пересчёте листа. Напрмер, у нас на листе есть таблица в которой содержится куча формул. И вам необходимо отследить всяческий пересчёт таблицы. При помощи этого макроса это можно легко выполнить.
Делается это следующим образом. В левом верхнем окошке выбираем пункт Worksheet, а правом окошкеCalculate.

После этого появится следующие начало и конец макроса, который и отслеживает пересчёт листа.

Private Sub Worksheet_Calculate()


End Sub

Если в этот код поместить какое-нибудь информационное сообщение, то при пересчёте формул на листе, нам будет появляться сообщение, например такое (Пример: Лист 3):

Private Sub Worksheet_Calculate()

MsgBox "Пересчёт листа выполнен!" & vbNewLine & _

"Последние изменения внёс " & Application.UserName & "!", _

vbInformation, "Пример"

End Sub

Application.UserName - это имя компьютера.

Событие листа

В этом уроке я рассмотрю оставшиеся события листа. Они вообще редко применяются, как я убедился на собственном опыте.




Worksheet_FollowHyperlink

Рассмотрим событие, которое возникает при переходе по ссылке. Делается это следующим образом. Заходим в окно VB, щёлкаем слева по необходимому листу. Открывается окно. В левом верхнем окошке выбираем пункт Worksheet, а правом окошке FollowHyperlink.

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

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)


End Sub

Если в этот код поместить какое-нибудь информационное сообщение, то при переходе по ссылке мы его увидим (Пример: Лист 1).

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)

MsgBox "Вы перешли по ссылке на мой сайт!", vbInformation, "Пример"

End Sub

Работа со сводными таблицами

И оставшиеся события - это события, которое происходят при работе со сводными таблицами. Делаются они аналогично предыдущим.

Worksheet_PivotTableAfterValueChange - Это событие возникает после изменения или пересчета ячейки либо диапазона ячеек в сводной таблице (для ячеек, содержащих формулы).

Worksheet_PivotTableBeforeAllocateChanges - Это событие происходит перед применением изменений к сводной таблице.
Событие PivotTableBeforeAllocateChanges происходит непосредственно перед выполнением программой Excel инструкции UPDATE CUBE для применения всех изменений к источнику данных OLAP в сводной таблице, и сразу же после того, как пользователь выберет применение изменений в пользовательском интерфейсе.

Worksheet_PivotTableBeforeCommitChanges - Это событие происходит перед внесением изменений в источник данных OLAP для сводной таблицы.
Событие PivotTableBeforeCommitChanges происходит непосредственно перед выполнением программой Excel инструкции COMMIT TRANSACTION над источником данных OLAP в сводной таблице, и сразу же после того, как пользователь выберет сохранение изменений для всей сводной таблицы.

Worksheet_PivotTableBeforeDiscardChanges - Это событие происходит перед отменой изменений в сводной таблице.
Происходит непосредственно перед тем, как Excel выполняет инструкцию ROLLBACK TRANSACTION в источнике данных OLAP, если транзакция все еще активна и очищает все измененные значения в сводной таблице, после того как пользователь выбрал отмену изменений.

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

Worksheet_PivotTableUpdate - Это событие происходит при обновлении отчета сводной таблицы на рабочем листе.

Надёжные расположения

Надежное расположение — это такое место на жестком диске (диск, папка), где Любой файл, можно открывать без проверки средствами центра обеспечения безопасности; кроме того, такие файлы не открываются в режиме защищенного просмотра.
Другими словами, если у Вас есть на диске папка, в которой у Вас хранятся все Ваши разработки, например с именем "Мои макросы" и Вы её "поместили" в надёжное расположение, то какие бы вы файлы с макросами в неё не помещали, у Вас Excel никогда не спросит подтверждение на запуск макросов и т.п.,независимо от того какие настройки безопасности у Вас стоят. В надёжных расположениях макросы всегда включены. Очень удобно помещать программы, которые Вы пишите или проверяете, но которым Вы доверяете, чтобы лишний раз не мучаться и "Включать содержимое".

Делается это следующим образом. Заходим на ленте во вкладку файл/параметры:

В открывшемся окне с левой стороны выбираем Центр управления безопасностью, а справойПараметры центра управления безопасностью

В следующем окне слева выбираем пункт Надёжные расположения.

Для того, чтобы добавить какую-то свою папку в надёжное расположение необходимо нажать на кнопку"Добавить новое расположение". После этого откроется следующее окно

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

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




Скачать

Рекомендуем курсы ПК и ППК для учителей

Вебинар для учителей

Свидетельство об участии БЕСПЛАТНО!