在excel中执行复制粘贴操作时禁用格式设置
我有以下代码来禁用单元格复制粘贴操作时的格式化-在excel中执行复制粘贴操作时禁用格式设置,excel,vba,Excel,Vba,我有以下代码来禁用单元格复制粘贴操作时的格式化- Private Sub Worksheet_Change(ByVal Target As Range) With Application .EnableEvents = False myValue = Target.Formula .Undo Target.Formula = myValue .EnableEvents = True End With
Private Sub Worksheet_Change(ByVal Target As Range)
With Application
.EnableEvents = False
myValue = Target.Formula
.Undo
Target.Formula = myValue
.EnableEvents = True
End With
End If
Application.CutCopyMode = False
End Sub
代码工作得很完美,但它在工作表中插入了许多其他问题
无法使用撤消/重做功能
无法在单击中更改单元格的焦点。
如果您有任何想法,我们将不胜感激。本质上,您希望禁止使用标准粘贴,并可能使用特殊粘贴/值替换它 您可以捕获粘贴函数并分配一条消息,告诉用户使用粘贴特殊值,如中所示
....
' place this in any suitable event trigger like
Application.CommandBars("Edit").Controls("Paste").OnAction = "TrappedPaste"
....
Sub TrappedPaste()
MsgBox "Your Paste is performed as PasteSpecialValues", vbOKOnly, "Paste"
' ok, now silently do a PasteSpecial/Values
On Error GoTo TryExcel
' try to paste text
ActiveSheet.PasteSpecial Format:="Text", Link:=False, DisplayAsIcon:=False
Exit Sub
TryExcel:
On Error GoTo DoesntWork
Selection.PasteSpecial xlPasteValues
Exit Sub
DoesntWork:
MsgBox "Sorry - wrong format for pasting", vbExclamation + vbOKOnly, "Paste Problem"
End Sub
小心。。。这并不适用于所有语言,因此对于国际应用程序,我们需要更微妙一些
If ExistControl("Edit", 22) Then Application.CommandBars("Edit").FindControl(ID:=22).OnAction = "TrappedPaste"
应用程序中有更多的地方用户可以从中获得粘贴,您需要将它们全部捕获
如果您喜欢这种方法,我可以进一步阐述。本质上,您希望禁止标准粘贴,并可能用特殊粘贴/值替换它 您可以捕获粘贴函数并分配一条消息,告诉用户使用粘贴特殊值,如中所示
....
' place this in any suitable event trigger like
Application.CommandBars("Edit").Controls("Paste").OnAction = "TrappedPaste"
....
Sub TrappedPaste()
MsgBox "Your Paste is performed as PasteSpecialValues", vbOKOnly, "Paste"
' ok, now silently do a PasteSpecial/Values
On Error GoTo TryExcel
' try to paste text
ActiveSheet.PasteSpecial Format:="Text", Link:=False, DisplayAsIcon:=False
Exit Sub
TryExcel:
On Error GoTo DoesntWork
Selection.PasteSpecial xlPasteValues
Exit Sub
DoesntWork:
MsgBox "Sorry - wrong format for pasting", vbExclamation + vbOKOnly, "Paste Problem"
End Sub
小心。。。这并不适用于所有语言,因此对于国际应用程序,我们需要更微妙一些
If ExistControl("Edit", 22) Then Application.CommandBars("Edit").FindControl(ID:=22).OnAction = "TrappedPaste"
应用程序中有更多的地方用户可以从中获得粘贴,您需要将它们全部捕获
如果您喜欢这种方法,我可以进一步详细说明。代码中有EndIf。我猜是打字错误吧?您正在尝试复制粘贴值吗?如果是,请参阅本链接第1期。看这里,代码中有一个EndIf。我猜是打字错误吧?您正在尝试复制粘贴值吗?如果是,请参阅本链接第1期。看这里