2015-11-02 5 views
1

Disabled копия пасты в Excel работает со следующим кодом:Отключить Копировать/Вставить

Option Explicit 
Sub ToggleCutCopyAndPaste(Allow As Boolean) 
    Call EnableMenuItem(21, Allow) 
    Call EnableMenuItem(19, Allow) 
    Call EnableMenuItem(22, Allow) 
    Call EnableMenuItem(755, Allow) 
    Application.CellDragAndDrop = Allow 
    With Application 
     Select Case Allow 
      Case Is = False 
       .OnKey "^c", "CutCopyPasteDisabled" 
       .OnKey "^v", "CutCopyPasteDisabled" 
       .OnKey "^x", "CutCopyPasteDisabled" 
       .OnKey "+{DEL}", "CutCopyPasteDisabled" 
       .OnKey "^{INSERT}", "CutCopyPasteDisabled" 
      Case Is = True 
       .OnKey "^c" 
       .OnKey "^v" 
       .OnKey "^x" 
       .OnKey "+{DEL}" 
       .OnKey "^{INSERT}" 
      End Select 
    End With 
End Sub 
Sub EnableMenuItem(ctlId As Integer, Enabled As Boolean) 
    Dim cBar As CommandBar 
    Dim cBarCtrl As CommandBarControl 
    For Each cBar In Application.CommandBars 
     If cBar.Name <> "Clipboard" Then 
      Set cBarCtrl = cBar.FindControl(ID:=ctlId, recursive:=True) 
      If Not cBarCtrl Is Nothing Then cBarCtrl.Enabled = Enabled 
     End If 
    Next 
End Sub 
Sub CutCopyPasteDisabled() 
    MsgBox "Sorry! Cutting, copying and pasting have been disabled in this workbook!" 
End Sub 

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

Как отключить копирование, даже дважды щелкнув по ячейке?

+0

пожалуйста, не надо! copy-paste - самая удобная операция пользователя. И вы, вероятно, ничего не помешаете –

+0

почти всегда есть хакерские способы извлечь текст –

+0

Да, но мне это нужно какое-то время нарочно. И приведенный выше код работает. Только я не могу предотвратить использование двойного щелчка. Обычно его показ отключен только после того, как он не работает после двойного щелчка по ячейке. – user3766722

ответ

0

Вы можете защитить свои рабочие листы с Worksheet.Protect, например:

Sheets("Sheet1").Protect "Password" 

Теперь пользователь не может выбрать ни изменить значения в ячейках. Вы также можете заблокировать ячейки manually.

Вы также можете Unprotect рабочий лист:

Sheets("Sheet1").Unprotect "Password" 

этого вам нужно будет сделать, прежде чем изменить рабочий лист (также через VBA).

Редактировать 1: Я не знаю, как позволить пользователю по-прежнему редактировать ячейки, но не копировать их значения. Другим «решением» этого может быть позволить пользователю вводить данные через форму. В качестве примера я добавил кнопку на листе:

add excel button

(Примечание. Если вы не видите вкладку Разработчик, you will have to add it) Теперь вам будет предложено, который макрос, чтобы назначить его, выберите Новый. Теперь вы можете заполнить подлодку (макро), назначенную кнопку со следующим кодом:

Sub Button1_Click() 
Sheets("Sheet1").Unprotect "Password" 
Sheets("Sheet1").Range("A1") = InputBox("New value") 
Sheets("Sheet1").Protect "Password" 
End Sub 

Теперь пользователь может только изменить значение этой ячейки, в этом примере А1.

+0

@aglod, спасибо за ваш ответ. Мое требование - пользователь может редактировать и добавлять любой текст в любую ячейку. Я просто хочу отключить копирование. Пользователи не могут копировать, вставлять в лист. – user3766722

+0

См. Мой отредактированный ответ. – agold

+0

Извините, я не могу понять. Может ли добавить PLS любой образец листа? – user3766722

0

Это может помочь?

Введите это на (код) страницы ThisWorkbook

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 
    Cancel = True 
    MsgBox "Double click disabled!" 
End Sub 

https://i.stack.imgur.com/WSraj.jpg

+1

Когда пользователь ограничивает или отключает VBA в своем приложении Excel - разве это не игнорируется? – userfuser

Смежные вопросы