2012-09-21 35 views
2

複製粘貼操作,我用下面的代碼過來,以禁止格式化,而細胞複製粘貼操作 -禁用格式,而在Excel

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 

代碼工作完美,但它插入到表等諸多問題。

  1. 無法使用撤銷/重做功能
  2. 無法更改單元格的焦點在單一的點擊。

任何想法將不勝感激。

+0

代碼中有'EndIf'。我猜猜錯了嗎?你是否試圖複製粘貼值?如果是,那麼請參閱此鏈接http://www.siddharthrout.com/2011/08/15/vba-excelallow-paste-special-only/ –

+0

問題1.請參閱此處http://stackoverflow.com/questions/7798575 /撤消歷史鍵,清晰的後運行宏的Excel –

回答

0

在本質上要禁止標準並可能由粘貼特殊的更換/值

您可以捕獲粘貼功能,並指定一條消息,告知用戶使用選擇性粘貼/價值觀像在

.... 
' 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" 

而且在用戶可以從中獲取「粘貼」的應用程序中還有更多的地方,您需要將它們全部收集起來。

如果您喜歡這種方法,我可以進一步闡述。