Событие удаления / добавления листов - VBA - PullRequest
2 голосов
/ 03 апреля 2019

Есть ли какое-либо событие, которое вызвало удаление и добавление листа?у меня есть попытка

Private Sub Workbook_NewSheet(ByVal Sh As Object)
End Sub

, но это событие работает только при добавлении листа.В моем случае мне нужно что-то, чтобы работать как в Add & Delete.

Любая помощь будет ценить.

Ответы [ 3 ]

3 голосов
/ 03 апреля 2019

Вот еще один способ

Logic

  1. Перед удалением листа подсчитайте количество листов в рабочей книге
  2. Когда лист активирован, проверьте количество листов в рабочей книге

Код

Dim PreviousWorksheetCount As Integer

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Dim CurrentWorksheetCount As Integer

    CurrentWorksheetCount = ThisWorkbook.Sheets.Count

    If CurrentWorksheetCount < PreviousWorksheetCount Then
        MsgBox "Sheet was deleted"
    End If
End Sub

Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object)
    PreviousWorksheetCount = ThisWorkbook.Sheets.Count
End Sub
2 голосов
/ 03 апреля 2019

Вот вам событие удаления листа.

Поместите этот код в стандартный модуль кода

Public shName As String

Sub Deletesheet()
    Dim oWS As Object
    On Error Resume Next
    Set oWS = Sheets(shName)
    If oWS Is Nothing Then
        MsgBox shName & " has been deleted"
    End If
End Sub

Поместите это в ThisWorkbook

Private Sub Workbook_SheetDeactivate(ByVal sh As Object)
    shName = sh.Name
    Application.OnTime Now + TimeSerial(0, 0, 1), "DeleteSheet"
End Sub
1 голос
/ 03 апреля 2019

Не существует ни одного события, которое захватывало бы либо добавление ( Workbook.NewSheet ), либо удаление ( Workbook.SheetBeforeDelete ). Но вы можете обнаружить оба события по отдельности и запустить один и тот же фрагмент кода для обоих событий.

Чтобы иметь возможность запускать код после удаления листа, вы можете использовать таймер, чтобы разрешить удаление. Более того, вы можете настроить цикл ожидания, который подсчитывает количество листов в рабочей книге и который завершается только тогда, когда количество листов является ожидаемым числом после завершения удаления. Затем вы выполняете намеченный код.

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

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