【问题标题】:Excel VBA - Unprotect worksheet on cell selection (single click, NOT double-clicking)Excel VBA - 取消保护单元格选择的工作表(单击,而不是双击)
【发布时间】:2018-05-14 13:48:36
【问题描述】:

我正在尝试在 Excel 2010 中创建一个宏,当单击 (不是双击) 特定范围内的单元格时,它将取消保护我的工作表,相反,如果我单击其他任何位置,我想保护我的工作表。

抱歉,我不是 VBA 专家。

我想出了这个代码:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, Range("E9:E22,I9:I21,N9:N20,Q9:Q14")) Is Nothing Then

        ActiveSheet.Unprotect Password:="abc"

    ElseIf Intersect(Target, Range("E9:E22,I9:I21,N9:N20,Q9:Q14")) Is Nothing Then

        ActiveSheet.Protect _
        Password:="abc", _
        UserInterfaceOnly:=True, _
        AllowFiltering:=True, _
        AllowSorting:=True, _
        AllowUsingPivotTables:=True

    End If
End Sub

显然,如果我双击单元格,此代码将完美运行,但我想知道如果我只选择(单击)一个单元格,是否有任何方法使其工作?

我尝试使用ActiveCell 而不是Target,但没有成功。

非常感谢, 斯特凡诺

【问题讨论】:

  • Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  • 没有BeforeSingleClick 事件,所以如果你对SelectionChange 没意见 - 这是你的选择。如果您只需要单击 - 可以选择通过 API 捕获 WM_LBUTTONDOWN。所以最好选择第一个选项。
  • 感谢 Scott 和 CommonSense,SelectionChange 非常适合我的需求。

标签: vba excel


【解决方案1】:

这是由于您正在使用BeforeDoubleClick 事件。 尝试改用Worksheet_SelectionChange

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 2013-05-26
    • 2023-01-14
    相关资源
    最近更新 更多