Verhindern Sie, dass ein Benutzer einfügen kann, erlauben Sie jedoch das Einfügen von Werten

Verhindern Sie, dass ein Benutzer einfügen kann, erlauben Sie jedoch das Einfügen von Werten

Ich habe den folgenden Code in meiner Arbeitsmappe, der einen Benutzer daran hindert, überhaupt etwas einzufügen.

Meine Anforderungen haben sich jetzt geändert und ich möchte Benutzern das Einfügen von Werten ermöglichen.

Gibt es eine Möglichkeit, dies zu erreichen?

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

Antwort1

Dieser VBA-Code sollte dies tun:

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

Antwort2

Würde das auf der Grundlage meiner vorherigen Antwort funktionieren?

Wir prüfen also, ob etwas eingefügt wurde, speichern dann den Wert, machen das Einfügen rückgängig und fügen nur den Wert erneut ein.

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

Wenn der Vorschlag in den Kommentaren keine bessere Lösung ist.

Antwort3

Ein anderer Ansatz, den ich erfolgreich ausprobiert habe, könnte dieser sein:

Entführen Sie STRG+C und STRG+V, damit nur spezielle Werte eingefügt werden.

Verwenden Sie also Ihren ursprünglichen Arbeitsmappencode, ersetzen Sie jedoch

Application.OnKey "^c", ""

mit

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

Erstellen Sie dann ein Modul mit Folgendem:

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

Und jetzt können Sie kopieren und einfügen, aber dadurch wird nur der Wert verschoben.

verwandte Informationen