我和我的團隊使用了一個 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