如何提高我的短VBA代码如下?

我试图保护我的工作簿上的单元格不被编辑。 我写了这个代码,

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

但经过一些testing,我发现了一个例外。 如果我剪下一个细胞并粘贴到另一个细胞,它是允许的! 我不确定是否还有其他例外,我还没有弄清楚。 我的问题是如何保护正在编辑的单元格,但同时能够被复制?

使用仅接口选项,这允许工作表被locking – 但仅用于用户交互。 任何代码都可以与表单交互而不被阻塞:

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

没有保护床单,我能想到的唯一解决scheme是:

 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