在 Microsoft Excel 中禁用 Ctrl + V(允许右键单击粘贴)

在 Microsoft Excel 中禁用 Ctrl + V(允许右键单击粘贴)

我和我的团队使用了一个 Excel 电子表格。此电子表格使用条件格式,因此我希望我的团队不要使用 Ctrl + V,而是右键单击并使用“粘贴为值”。当他们使用 Ctrl + V 时,会导致条件格式随着时间的推移而变得支离破碎。我已经告诉他们这件事,并使用数据验证添加了一个弹出消息提醒,但他们仍然使用 Ctrl + V!

我想禁用使用 Ctrl + V 的粘贴功能,并向 Ctrl + V 添加一个消息框。

这是我的 VBA(我将 pasteWarn() 绑定到 Ctrl + V)。它似乎根本没有任何效果 - 消息框没有出现,而 ctrl + V 正常工作。

Sub pasteGone()
'Disable CTRL + V.
Application.OnKey "^{v}", "" 'Paste
End Sub

Sub pasteWarn()
' Bind this to Ctrl + V
MsgBox "Ctrl + V has been disabled. Please right-click and use 'Paste as Values'."
End Sub

可能出现的复杂情况:我和我的团队同时使用 Office 2016、2013 和 2010。(我使用的是 2016 版;他们都使用的是 2010 版或 2013 版。)

答案1

这本身并不是问题的答案,但也许是解决问题的一种方法。

不要强迫用户适应工作簿,而要让工作簿适应输入以适应工作簿。
这意味着,当用户粘贴某些内容时,撤消他们所做的操作并将其粘贴为值。
这样,他们就可以使用 CTRL+V 进行粘贴,并且它仍然是正确的。
您必须在 lastAction 行的代码中设置一个断点,并查看您的语言中的“Paste”是什么,然后在 If 中使用它。

Private Sub Worksheet_Change(ByVal Target As Range)

  lastAction = Application.CommandBars("Standard").FindControl(ID:=128).List(1)

  If lastAction = "Paste" Then ' change to your language
        With Application
            .EnableEvents = False
            .Undo
        End With
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Application.EnableEvents = True
  End If
End Sub

将上述代码添加到您想要的表单中。如果您希望将 PasteValues 限制在表单的一部分,您也可以使用目标。

答案2

我以前遇到过类似的问题,我能找到的唯一解决方法就是阻止用户复制。(我知道这可能不是你想要的,因为他们可能仍然需要使用复制)

我使用了以下内容:

Private Sub Workbook_Activate()
    Application.CutCopyMode = False
    Application.OnKey "^c", ""
    Application.CellDragAndDrop = False
End Sub
Private Sub Workbook_Deactivate()
    Application.CellDragAndDrop = True
    Application.OnKey "^c"
    Application.CutCopyMode = False
End Sub
 Private Sub Workbook_WindowActivate(ByVal Wn As Window)
    Application.CutCopyMode = False
    Application.OnKey "^c", ""
    Application.CellDragAndDrop = False
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
    Application.CellDragAndDrop = True
    Application.OnKey "^c"
    Application.CutCopyMode = False
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    Application.CutCopyMode = False
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Application.OnKey "^c", ""
    Application.CellDragAndDrop = False
    Application.CutCopyMode = False
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    Application.CutCopyMode = False
End Sub
Private Sub Workbook_Open()
    MsgBox "Copying and Pasting into the skills matrix has been disabled to prevent changes in the workbook functionality."
End Sub

相关内容