EXCEL输入一次后,除了密码,任何形式都无法删除或者更改单元格内容

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If Target <> "" Then
Target.Locked = True
ActiveSheet.Protect
End If
If Target = "" Then
ActiveSheet.Unprotect
Else
Dim b
Z:
b = InputBox(" 很抱歉,您输错了,不能改了!!! ^__^", "检查权限")
If b = "12" Then
ActiveSheet.Unprotect
Else
If b = "" Then

Else

GoTo Z
ActiveSheet.Protect

Exit Sub
End If
End If
End If
End Sub

有两个问题希望高手能回复一下:
1.现在是工作簿所有单元格表面上录入一次,要输入密码才能改的,怎样指定列B和列F输入一次不能更改?其他不指定的不受密码控制,随意改

2、我从空白地方,往有内容的地方框选,然后按“delete”键,是可以删除掉有内容的东西的,然后就又可以重新改了

忘知道的人能回复下,感谢~~~

  先说下这段代码存在的问题:
  1 . 程序中的语句块 “GoTo Z : ActiveSheet.Protect : Exit Sub ” ,后面2句是永远不会执行的;
  
  其次,回到问题上:
  1. 如何制定列B和F输入一次不能更改?其他单元格不受密码控制,随意改
  A:①先全选单元格(Ctrl+A或者选单元格区域左上的小三角⊿),右键-设置单元格格式-保护(标签)-去除“锁定”前的√;②再选中B和F列,同样的方式,打上“锁定”前的√;③保护工作表,可以通过右键sheet标签-保护工作表-输入密码,或者用VBA activesheet.protect password := "12";④计数可以在Worksheet_SelectionChange中申明一个static变量count,来记录修改的次数;

  2. “我从空白地方,往有内容的地方框选,然后按“delete”键,是可以删除掉有内容的东西的,然后就又可以重新改了”

A:如果你选中的单元格中包括了已经锁定的单元格,并且工作表处于保护状态,你是无法进行删除操作的;所以,出现这种情况,可能你工作表并未处于保护状态,或者单元格并不是锁定的;
在你的代码中:
'...
If Target = "" Then
ActiveSheet.Unprotect
'....
你选中一个空单元格,你的工作表的保护就被取消了,所以是个漏洞;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-20
当B或F列被激活的时候就弹框提示,输入错误就把焦点转移到别处
不过这种设置有很多漏洞的
第2个回答  2013-08-23
工具-保护-保护工作表
相似回答