如何改进我的短VBA代码如下?

时间:2016-04-16 15:34:07

标签: excel vba excel-vba

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

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

但经过一些测试后,我发现了异常。如果我切割一个单元格并粘贴到另一个单元格,它是允许的!我不确定是否还有其他类似的例外情况我还没弄明白。我的问题是如何保护正在编辑的单元格,同时又能够复制?

2 个答案:

答案 0 :(得分:2)

使用仅限界面选项,这样可以锁定工作表 - 但仅限于用户交互。任何代码都可以与工作表交互而不会被阻止:

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

答案 1 :(得分: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