Отключить Ctrl + V в Microsoft Excel (разрешить вставку по щелчку правой кнопкой мыши)

Отключить Ctrl + V в Microsoft Excel (разрешить вставку по щелчку правой кнопкой мыши)

У меня есть таблица Excel, используемая мной и моей командой. Эта таблица использует условное форматирование, поэтому я бы хотел, чтобы моя команда НЕ использовала Ctrl + V, а вместо этого щелкала правой кнопкой мыши и использовала «вставить как значения». Когда они используют Ctrl + V, это приводит к фрагментации условного форматирования с течением времени. Я сказал им об этом и добавил всплывающее сообщение-напоминание с помощью проверки данных, но они все равно используют Ctrl + V!

Я хочу отключить вставку с помощью Ctrl + V и добавить msgbox для 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. (У меня 2016, у них у всех 2010 и 2013.)

решение1

Это не ответ на вопрос как таковой, но, возможно, способ решить проблему.

Вместо того, чтобы заставлять пользователей подстраиваться под рабочую книгу, заставьте рабочую книгу адаптировать ввод под рабочую книгу.
То есть, когда пользователь что-то вставляет, отмените то, что он сделал, и вставьте это как значения.
Таким образом, он может выполнить вставку с помощью CTRL+V, и все будет по-прежнему правильно.
Вам нужно установить точку останова в коде на строке lastAction и посмотреть, что означает «Вставить» на вашем языке, а затем использовать это в 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

Добавьте указанный выше код в лист(ы), на которых вы хотите это сделать. Вы также можете использовать Target, если хотите ограничить 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

Связанный контент