【发布时间】: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非常适合我的需求。