【问题标题】:How to Lock the data in a cell in excel using vba如何使用vba锁定excel单元格中的数据
【发布时间】:2011-03-03 12:25:48
【问题描述】:

我想阻止其他人使用 VBA 编辑我的 Excel 工作表中的单元格内容。可以这样做吗?

【问题讨论】:

标签: vba excel


【解决方案1】:

您可以首先通过将它们的 Locked 状态设置为 False 来选择您不想被保护(用户可编辑)的单元格:

Worksheets("Sheet1").Range("B2:C3").Locked = False

然后,您可以保护工作表,并且所有其他单元格都将受到保护。 执行此操作并仍允许您的 VBA 代码修改单元格的代码是:

Worksheets("Sheet1").Protect UserInterfaceOnly:=True

Call Worksheets("Sheet1").Protect(UserInterfaceOnly:=True)

【讨论】:

  • 您可能还想添加密码,否则只需单击“取消保护工作表”即可对之前锁定的单元格进行编辑。
  • Worksheets("Sheet1").Protect(UserInterfaceOnly:=True) 上面的行应该是 Worksheets("Sheet1").Protect UserInterfaceOnly:=True ,即没有括号
  • @dinotom,看看编辑历史,编辑它的人解释了原因
  • @Lance Roberts... 好的,我不知道如何查看编辑历史记录,但该语法不起作用
  • 是的,VBA 的一个奇怪之处。如果您使用“呼叫”,则可以使用括号。我会编辑。
【解决方案2】:
Sub LockCells()

Range("A1:A1").Select

Selection.Locked = True

Selection.FormulaHidden = False

ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= False, AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows:=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True

End Sub

【讨论】:

    【解决方案3】:

    假设在一种情况下,如果您想锁定从 A1 到 I50 范围内的单元格,那么下面是代码:

    Worksheets("Enter your sheet name").Range("A1:I50").Locked = True
    ActiveSheet.Protect Password:="Enter your Password"
    

    在另一种情况下,如果您已经拥有受保护的工作表,请按照以下代码操作:

    ActiveSheet.Unprotect Password:="Enter your Password"
    Worksheets("Enter your sheet name").Range("A1:I50").Locked = True
    ActiveSheet.Protect Password:="Enter your Password"
    

    【讨论】:

      【解决方案4】:

      您也可以在工作表的更改事件中捕获的工作表级别上执行此操作。如果这更适合您的需求。允许基于值、条件等进行动态锁定...

      Private Sub Worksheet_Change(ByVal Target As Range)
      
          'set your criteria here
          If Target.Column = 1 Then
      
              'must disable events if you change the sheet as it will
              'continually trigger the change event
              Application.EnableEvents = False
              Application.Undo
              Application.EnableEvents = True
      
              MsgBox "You cannot do that!"
          End If
      End Sub
      

      【讨论】:

        【解决方案5】:

        尝试使用Worksheet.Protect 方法,如下所示:

        Sub ProtectActiveSheet()
            Dim ws As Worksheet
            Set ws = ActiveSheet
            ws.Protect DrawingObjects:=True, Contents:=True, _
                Scenarios:=True, Password="SamplePassword"
        End Sub
        

        但是,您应该注意在 VBA 代码中包含密码。如果您只是想设置一个简单的障碍来防止用户犯下删除公式等小错误,则不一定需要密码。

        另外,如果您想了解如何在 Excel 中的 VBA 中执行某些操作,请尝试录制宏并查看它生成的代码。这是开始使用 VBA 的好方法。

        【讨论】:

          猜你喜欢
          • 2013-06-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多