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.