2015-11-02 149 views
1

残疾人复制粘贴正在与下面的代码:禁止复制/粘贴在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

请,不要!复制粘贴是最支持的用户操作。而且你可能不会阻止它 –

+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 

现在,用户只能够更改该单元格的值,在这个例子中A1。

+0

@aglod,感谢您的回复。我的要求是用户可以编辑和添加任何文本到任何单元格。我只想禁用复制粘贴。用户无法复制,粘贴到工作表中。 – user3766722

+0

看到我编辑的答案。 – agold

+0

对不起,我不明白。你可以添加任何示例工作表? – 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

当用户在Excel应用程序中限制或取消VBA时 - 是否不会被忽略? – userfuser