我和我的团队使用了一个 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