사용자가 붙여넣을 수 없도록 하지만 값 붙여넣기는 허용합니다.

사용자가 붙여넣을 수 없도록 하지만 값 붙여넣기는 허용합니다.

내 통합 문서에는 사용자가 아무것도 붙여넣을 수 없도록 하는 아래 코드가 있습니다.

내 요구 사항이 이제 변경되었으며 사용자가 값만 붙여넣을 수 있도록 하고 싶습니다.

이것을 달성할 수 있는 방법이 있나요?

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

답변1

이 VBA 코드는 다음을 수행해야 합니다.

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    On Error Resume Next
    Target.PasteSpecial xlPasteValues
    Application.CutCopyMode = True
End Sub

답변2

이전 답변을 바탕으로 이것이 효과가 있습니까?

그래서 붙여넣은 것이 있는지 확인한 다음 값을 저장하고 붙여넣기를 취소하고 값만 다시 삽입합니다.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim UndoList As String, StoreValue As String
UndoList = Application.CommandBars("Standard").Controls("&Undo").List(1)
If Left(UndoList, 5) = "Paste" Then
    StoreValue = Target.Value
    With Application
        .EnableEvents = False
        .Undo
    End With
    Target.Value = StoreValue
End If
Application.EnableEvents = True
End Sub

댓글의 제안이 더 나은 해결책이 아닌 경우.

답변3

제가 성공적으로 시도한 또 다른 접근 방식은 다음과 같습니다.

CTRL+C 및 CTRL+V를 가로채서 특수 값만 붙여넣도록 합니다.

따라서 원래 통합 문서 코드를 사용하여 대체하십시오.

Application.OnKey "^c", ""

~와 함께

Application.OnKey "^{v}", "pasteValues"
Application.OnKey "^{c}", "copyValues"

그런 다음 다음을 사용하여 모듈을 만듭니다.

Public copyVal As String
Private Sub pasteValues()
selection = copyVal
End Sub
Private Sub copyValues()
copyVal = selection
End Sub

이제 복사하여 붙여넣을 수 있지만 값만 이동됩니다.

관련 정보