Функция отмены не работает для действия копирования / вставки - PullRequest
0 голосов
/ 21 января 2020

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

Поэтому я пытаюсь реализовать функцию, которая предупреждает пользователя, который вносит изменения, когда выбрано несколько листов, после чего следует отменить. Он отлично работает, когда вы меняете ячейку или когда вы меняете ячейку перетаскиванием, но не работает, когда вы копируете и вставляете ячейку. Когда я делаю это, я получаю сообщение об ошибке (в переводе с голландского) «Ошибка 1004: сбой метода отмены объектного приложения». Что я делаю не так?

Ошибка: enter image description here

Мой код:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name = Application.ActiveSheet.Name Then
    If ActiveWindow.SelectedSheets.Count > 1 Then
        MsgBox "WAARSCHUWING: Meerdere sheets geselecteerd! Veranderingen ongedaan gemaakt"
        Application.ActiveSheet.Unprotect
        UndoLastAction

    End If
End If
End Sub

Sub UndoLastAction()
With Application
    .EnableEvents = False
    .Undo
    .EnableEvents = True
End With
End Sub

1 Ответ

0 голосов
/ 22 января 2020

Я использовал три обработчика событий одновременно:

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    ' prevent Right-Click to paste something
    If ActiveWindow.SelectedSheets.Count > 1 Then
        ' check whether there is something in clipboard
        If Not Application.CutCopyMode = False Then
            MsgBox "WARNING: It is fobidden to do any actions on multiple sheets selection!"
            ' cancel the right-click action
            Cancel = True
            'ungroup sheets selection
            ActiveWindow.SelectedSheets.Item(Sh.Name).Select
        End If
    End If
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    ' prevent cell change if multiple sheets are selected
    If ActiveWindow.SelectedSheets.Count > 1 Then
            MsgBox "WARNING: It is fobidden to do any actions on multiple sheets selection!"
            'ungroup sheets selection
            ActiveWindow.SelectedSheets.Item(Sh.Name).Select
    End If
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    ' prevent cell selection change if multiple sheets are selected
    If ActiveWindow.SelectedSheets.Count > 1 Then
            MsgBox "WARNING: It is fobidden to do any actions on multiple sheets selection!"
            'ungroup sheets selection
            ActiveWindow.SelectedSheets.Item(Sh.Name).Select
    End If
End Sub

Вот что я попробовал:
1. Попробуйте скопировать (Ctrl + C) текст и заранее выбрать цель (то же самое без выбора целевой ячейки), затем выберите несколько листов и попытайтесь вставить с помощью Ctrl + V без изменения выбранной ячейки - это скопирует значение только на исходный лист.
2. Попробуйте скопировать (Ctrl + C) текст, затем выберите несколько листов и попробуйте выбрать ячейку для вставки
3. Попробуйте щелкнуть правой кнопкой мыши что-нибудь в буфере обмена и выбрать несколько листов.
enter image description here

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