在 Microsoft Excel 中停用 Ctrl + V(允許右鍵按一下貼上)

在 Microsoft Excel 中停用 Ctrl + V(允許右鍵按一下貼上)

我和我的團隊使用了一個 Excel 電子表格。此電子表格使用條件格式,因此我希望我的團隊不要使用 Ctrl + V,而是右鍵單擊並使用“貼上為值”。當他們使用 Ctrl + V 時,會導致條件格式隨著時間的推移而碎片化。我已經告訴他們​​這一點,並且使用資料驗證添加了彈出訊息提醒,但他們仍然使用 Ctrl + V!

我想停用 Ctrl + V 貼上,並向 Ctrl + V 添加訊息框。

這是我的 VBA(我將 PasteWarn() 綁定到 Ctrl + V)。它似乎根本沒有任何效果 - msgbox 沒有出現,並且 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。

答案1

這不是問題的答案,但也許是解決問題的一種方法。

不要強迫使用者適應工作簿,而是讓工作簿調整輸入以適應工作簿。
這意味著,當用戶貼上某些內容時,請撤消他們所做的操作並將其貼上為值。
這樣他們就可以使用 CTRL+V 進行黏貼,而且它仍然是正確的。
您必須在最後一個操作行的程式碼中設定一個斷點,並查看您的語言中的「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 限制為僅工作表的一部分,您也可以使用 Target。

答案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

相關內容