Как в рабочей книге заблокировать стандартные кнопки, команды и горячие клавиши, которые отвечают за копирование?
Для того, чтобы в нужной рабочей книге "заблокировать" использование команд Вырезать, Копировать, Вставить, Специальная вставка и Формат по образцу, а также горячих клавиш CTRL+X, CTRL+C, CTRL+V скопируйте нижеприведенный код в модуль ThisWorkbook (ЭтаКнига) нужной рабочей книги.
Private Sub Workbook_Activate() ChangeEnvironment End Sub Private Sub Workbook_Deactivate() RestoreEnvironment End Sub Private Sub ChangeEnvironment() Dim iCommandBar As CommandBar Dim iFindControl As CommandBarButton With Application .OnKey Key:="^x", Procedure:="No_Copy" ' "" .OnKey Key:="^c", Procedure:="No_Copy" ' "" .OnKey Key:="^v", Procedure:="No_Copy" ' "" .CellDragAndDrop = False 'Снятие опции перетаскивать ячейки For Each iControlID In Array(19, 21, 22, 108, 369, 370, 755) For Each iCommandBar In .CommandBars Set iFindControl = iCommandBar.FindControl _ (Id:=iControlID, Visible:=False, Recursive:=True) If Not iFindControl Is Nothing Then iFindControl.OnAction = "No_Copy" If (iCommandBar.Protection And msoBarNoCustomize) = 0 Then _ iCommandBar.Protection = msoBarNoCustomize End If Next Next End With End Sub Private Sub RestoreEnvironment() Dim iCommandBar As CommandBar Dim iFindControl As CommandBarButton With Application .OnKey Key:="^x": .OnKey Key:="^c": .OnKey Key:="^v" .CellDragAndDrop = True 'Установка опции перетаскивать ячейки For Each iControlID In Array(19, 21, 22, 108, 369, 370, 755) For Each iCommandBar In .CommandBars Set iFindControl = iCommandBar.FindControl _ (Id:=iControlID, Visible:=False, Recursive:=True) If Not iFindControl Is Nothing Then iFindControl.Reset If (iCommandBar.Protection And msoBarNoCustomize) <> 0 Then _ iCommandBar.Protection = msoBarNoProtection End If Next Next End With End Sub Private Sub No_Copy(): End Sub 'В любом стандартном модуле
В принципе тоже самое, только во второй версии передача аргументов осуществляется по позиции, а не по имени, как в первом случае, кроме того здесь не используется метод Reset объекта CommandBarButton, увеличивается количество обращений к объекту Application и нет проверок - защищена или нет панель инструментов, на которой находится найденная кнопка, последнее, естественно, приводит к тому, что мы лишний раз мучаем объект CommandBar (т.е., к примеру, 'защищаем' объект CommandBar у которого значение свойства и так msoBarNoCustomize)
Private Sub Workbook_Activate() DisabledCopyPaste msoBarNoCustomize End Sub Private Sub Workbook_Deactivate() DisabledCopyPaste msoBarNoProtection, "" End Sub Private Sub DisabledCopyPaste(iProtection%, Optional iMacros$ = "No_Copy") Dim iCommandBar As CommandBar Dim iFindControl As CommandBarButton If iProtection = msoBarNoCustomize Then Application.OnKey "^x", iMacros Application.OnKey "^c", iMacros Application.OnKey "^v", iMacros Else Application.OnKey Key:="^x" Application.OnKey Key:="^c" Application.OnKey Key:="^v" End If Application.CellDragAndDrop = Not CBool(iProtection) For Each iControlID In Array(19, 21, 22, 108, 369, 370, 755) For Each iCommandBar In Application.CommandBars Set iFindControl = iCommandBar.FindControl(, iControlID, , False, True) If Not iFindControl Is Nothing Then iFindControl.OnAction = iMacros iCommandBar.Protection = iProtection End If Next Next End Sub Private Sub No_Copy(): End Sub 'В любом стандартном модуле
Данный пример нельзя использовать в MS Excel 95, т.к. там отсутствует семейство CommandBars, и он неактуален для применения в MS Excel 2000, XP по причине появления в этих версиях буфера обмена.