Microsoft Excel에서 Ctrl + V 비활성화(마우스 오른쪽 버튼 클릭으로 붙여넣기 허용)

Microsoft Excel에서 Ctrl + V 비활성화(마우스 오른쪽 버튼 클릭으로 붙여넣기 허용)

나와 내 팀에서 사용하는 Excel 스프레드시트가 있습니다. 이 스프레드시트는 조건부 서식을 사용하므로 우리 팀에서는 Ctrl + V를 사용하지 않고 대신 마우스 오른쪽 버튼을 클릭하고 '값으로 붙여넣기'를 사용하기를 바랍니다. Ctrl + V를 사용하면 시간이 지남에 따라 조건부 서식이 조각화됩니다. 이에 대해 그들에게 말했고 데이터 유효성 검사를 사용하여 팝업 메시지 알림을 추가했지만 그들은 여전히 ​​Ctrl + V를 사용합니다!

Ctrl + V로 붙여넣기를 비활성화하고 Ctrl + V에 msgbox를 추가하고 싶습니다.

여기 내 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

위의 코드를 원하는 시트에 추가하세요. PasteValues를 시트의 일부로만 제한하려는 경우 대상을 사용할 수도 있습니다.

답변2

이전에도 비슷한 문제가 있었는데, 제가 찾을 수 있는 유일한 해결 방법은 사용자가 복사할 수 없도록 막는 것이었습니다. (나는 이것이 당신이 추구하는 것과 정확히 일치하지 않을 수도 있다는 것을 알고 있습니다. 여전히 copy를 사용해야 할 수도 있기 때문입니다)

나는 아래를 사용했습니다 :

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

관련 정보