gpt4 book ai didi

excel - Worksheet_SelectionChange 被不当解雇

转载 作者:行者123 更新时间:2023-12-04 03:31:12 25 4
gpt4 key购买 nike

我有一个命名范围,我想防止用户修改它,所以我使用基本的 Worksheet_Change 例程:

Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False
If Not Intersect(Target, Range("MyRange")) Is Nothing Then
Application.Undo
MsgBox "You're not allowed to do this!"
End If
Application.EnableEvents = True

End Sub

这是我为我的工作表编写的第一个例程,它似乎工作得很好。每当用户尝试删除或更改命名范围内的某些单元格时,事件就会触发,所做的更改将被撤销。还会出现消息框:“不允许您这样做!”。

但是,如果用户选择了不允许输入数据的范围内的单元格,我需要提醒用户。为此,我使用 Worksheet_SelectionChange:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Intersect(Target, Range("MyRange")) Is Nothing Then
MsgBox "This cells is protected."
End If

End Sub

如果我只是去选择不同的单元格,Worksheet_SelectionChange 就会起作用。我的意思是,事件按预期触发,并显示消息“此单元格 protected ”。按预期显示。问题是当我更改命名范围内某些单元格的值时。这两个事件都被解雇了。它显示“你不被允许这样做!”然后是“此单元格 protected 。”

如何防止 Worksheet_SelectionChange 在 Worksheet_Change 运行后触发?...

编辑:我忘了解释一些事情。当我选择一些“ protected 单元格”时,Worksheet_SelectionChange 会触发。如果我只是删除那个单元格的内容,那么 Worksheet_Change 会按预期触发,并且不会发生其他任何事情。正如预期的那样。

最佳答案

这是你正在尝试的吗?

Option Explicit

Dim runThis As Boolean

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If runThis = False Then
runThis = True
Exit Sub
End If

If Not Intersect(Target, Range("MyRange")) Is Nothing Then
MsgBox "This cells is protected."
End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, Range("MyRange")) Is Nothing Then
Application.Undo
MsgBox "You're not allowed to do this!"
runThis = False
End If
Application.EnableEvents = True
End Sub

关于excel - Worksheet_SelectionChange 被不当解雇,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66778563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com