用vba在worksheet_change事件中如何实现一个单元格区域的值不可更改(只读)
如果在该区域(如[A1:F8])中更改任意一个单元格的值或是将其删除,则弹出一个提示框,并且该单元格的值变成原来的.请问该如何实现呀?谢谢!...
如果在该区域(如[A1:F8])中更改任意一个单元格的值或是将其删除,则弹出一个提示框,并且该单元格的值变成原来的.请问该如何实现呀?谢谢!
展开
2个回答
展开全部
Dim Flag As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
If Flag = True Then
Flag = False
Exit Sub
End If
If Target.Row >= 1 And Target.Row <= 8 And Target.Column >= 1 And Target.Column <= 6 Then
MsgBox "禁止更改"
SendKeys "^z"
Flag = True
End If
End Sub
'改了一下,刚测试,第一次不能改,第二次能改,所以将上面的代码调整了一下。
'Change事件,不太好搞,因为更改后触发事件,改回来也要触发事件,汗
Private Sub Worksheet_Change(ByVal Target As Range)
If Flag = True Then
Flag = False
Exit Sub
End If
If Target.Row >= 1 And Target.Row <= 8 And Target.Column >= 1 And Target.Column <= 6 Then
MsgBox "禁止更改"
SendKeys "^z"
Flag = True
End If
End Sub
'改了一下,刚测试,第一次不能改,第二次能改,所以将上面的代码调整了一下。
'Change事件,不太好搞,因为更改后触发事件,改回来也要触发事件,汗
追问
谢谢你的回答,通过撤销操作的确可以把单元格的值复原,但却响应了两次change事件,请问可不可以在该事件中屏蔽掉所有的键盘输入(同时还要屏蔽掉鼠标的双击响应)以达到不可更改的目的呢?
追答
屏蔽掉所有的键盘输入(同时还要屏蔽掉鼠标的双击响应),这样需要用Hook全局钩子,较麻烦并且易发生意外。我刚改了后的代码应该解决了这个问题,请测试一下。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询