Как отключить событие Worksheet.Change, когда открыт Excel? Затем включите его после запуска макроса - PullRequest
0 голосов
/ 31 октября 2019

У меня есть пакет служб SSIS, который запускается каждую ночь, и он создает файл Excel для моих пользователей. Один пользователь попросил меня включить событие Worksheet.Change в одну из вкладок рабочего листа, чтобы он мог отслеживать любые изменения, которые он вносит.

Как отключить событие Worksheet.Change во время ночного производства Excelфайл, а затем повторно включить его для моего пользователя?

Я попытался добавить следующую строку в событие Worksheet.Change:

If Range("B6").Value = "X" Then Exit Sub

Мой пользователь затем запускает макрос, нажимая кнопку в файле Excel, которая удаляет «X» в B6, который затем начал бы выделять ячейки, которые он меняет.

Это событие изменения, которое я добавил на вкладку листа

Public Sub Worksheet_Change(ByVal Target As Range)
     If Range("B6").Value = "X" Then Exit Sub
     Target.Interior.ColorIndex = 27
End Sub

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

Sub clearCell()
     'Activates Sub Worksheet_Change in the Data tab by removing the X in B6
     'declare object variable to hold reference to cells to clear
     Dim myRange As Range
     'identify cells to clear
     Set myRange = ThisWorkbook.Worksheets("Data").Range("B6")
     'clear cells (including formatting)
     myRange.Clear
End Sub

По какой-то причине мой VBA не работает. Я попытался внести изменения на вкладке листа, и ничего не выделяется, как это должно быть. Я ожидал бы, что, поскольку «X» очищен от B6, любые изменения на рабочем листе будут выделены.

1 Ответ

1 голос
/ 31 октября 2019

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

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

Public Sub Worksheet_Change(ByVal Target As Range)
    If GetSetting("YourApplicationName", "Updates", "LoggingEnabled", "1") = "1" Then
        ...
    End If
End Sub

И устанавливаете флаг следующим образом:

SaveSetting "YourApplicationName", "Updates", "LoggingEnabled", "0"

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...