【问题标题】:disable editing in cells without protecting worksheet vba在不保护工作表 vba 的情况下禁用单元格中的编辑
【发布时间】:2016-05-01 21:17:19
【问题描述】:

我想禁用单元格编辑(直接输入单元格),但想通过代码更新该单元格而不保护工作表

有人知道吗?

【问题讨论】:

  • 无法实现的验证???
  • 当您说without protecting worksheet 时,您的意思是您不想在代码运行后对其进行保护吗?意味着它将对用户处于不受保护的状态。
  • Protection 有一个“UserInterfaceOnly”选项,允许您使用具有典型 Unprotect/Reprotect 步骤的代码进行更新。

标签: excel vba cell


【解决方案1】:

在工作表的代码模块中:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Range("A1:A10"), Target) Is Nothing Then
        Application.EnableEvents = False
        Target.ClearContents '// Assuming you want to keep it blank
        Application.EnableEvents = True
    End If
End Sub

然后在您的代码中,只要您想更改一个值,只需事先禁用事件:

'// Will be deleted
Range("A5").Value = "TEST"

'// Will not be deleted
Application.EnableEvents = False
Range("A5").Value = "TEST AGAIN"
Application.EnableEvents = True

【讨论】:

    【解决方案2】:

    我遇到了类似的问题并找到了解决方法。无论出于何种原因,我都无法让我的宏在受保护的工作表的情况下正确运行,所以我所做的就是作为代码为我不希望用户更改的任何单元格弹出一个消息框。然后我将“Application.DisplayAlerts = False”添加到需要修改这些单元格的任何代码的开头,并在这些代码的末尾将警报重置回 True。

    【讨论】:

    • 代码使用单引号 ` 代替双引号 "。这将呈现为代码Application.DisplayAlerts = False
    猜你喜欢
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    相关资源
    最近更新 更多