2016-04-16 64 views
0

我試圖保護我的工作簿上的單元格不被編輯。我寫了這段代碼,如何提高我的短VBA代碼如下?

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 
    Application.EnableEvents = False 
    Application.Undo 
    Application.EnableEvents = True 
End Sub 

但是經過一些測試後,我發現了一個異常。如果我切割一個細胞並粘貼到另一個細胞,它是允許的!我不確定是否還有其他例外,我還沒有弄清楚。我的問題是如何保護正在編輯的單元格,但同時能夠被複制?

+1

如果工作表受到保護(也就是您不希望更改的單元格),那麼我會在ctrl + x(或其他所有會更改單元格的值)....所以你使用哪個excel? –

+0

我正在使用Excel 2013.我的代碼可以保護我不改變單元格的內容,但不會剪切它並粘貼到另一個地方。對於您的解決方案,我如何保護所有牀單?似乎我必須逐一去查看>保護表單,如果我有很多表單,這真的很麻煩。@ DirkReichel – Nicholas

+0

是的,如果您使用Excel的內置保護表單,它可以正常工作。但是除非有一個解決方案來一次性應用所有的表格,否則我寧願使用一個簡短的VBA代碼。但是,我目前的代碼有一些問題。 – Nicholas

回答

1

沒有保護片我能想到的唯一的解決辦法是:

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) 
    If Application.CutCopyMode = 2 Then Application.CutCopyMode = 0 
End Sub 

應該是自我解釋;)

或銀行經營的所有圖紙,如:

Sub protectAllSheets() 
    Dim x As Variant 
    For Each x In ThisWorkbook.Sheets 
    x.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True 
    Next 
End Sub 
2

使用界面唯一選項,這允許工作表被鎖定 - 但僅用於用戶的交互。任何代碼都可以不受阻擋地與表單交互:

Private Sub Workbook_Open() 
    For Each ws In ThisWorkbook.Sheets 
     ws.Protect UserInterfaceOnly:=True 
    Next 
End Sub 
+0

您能否介紹一下用戶交互?它包含什麼,什麼不包含? – Nicholas

+0

如果某個單元格被鎖定,則無法更改其內容,但是如果[Worksheet.Protect](https://msdn.microsoft.com/en-us/library/office/ff840611.aspx)爲** True **那麼宏仍然可以改變它。據我所知,對於宏而言,表單就像沒有任何限制保護一樣。 –

+0

宏只能通過UserInterfaceOnly參數將Worksheet.Protect設置爲true。用戶交互是用戶可以通過鍵盤和鼠標更改的任何內容 - 應用程序知道您是否更改了某些內容,或者某些代碼正在運行。如果是這封信,它將允許更改。 –