如何使用VBA禁用Excel中每个单元格中的特定键
我有一个excel表格,用户将在每个单元格中输入元数据。我需要做的是编写一个宏,它只允许字母数字字符和逗号 我编写了一个宏用于测试,它不允许使用特殊字符。但当我在单元格中输入一个有效字符后,它允许我输入不允许的字符。我不知道如何纠正它 我的代码:如何使用VBA禁用Excel中每个单元格中的特定键,excel,vba,Excel,Vba,我有一个excel表格,用户将在每个单元格中输入元数据。我需要做的是编写一个宏,它只允许字母数字字符和逗号 我编写了一个宏用于测试,它不允许使用特殊字符。但当我在单元格中输入一个有效字符后,它允许我输入不允许的字符。我不知道如何纠正它 我的代码: Private Sub WorkBook_Open() MsgBox "Running the Disable_Keys() Macro" Call ThisWorkbook.Disable_Keys End Sub Su
Private Sub WorkBook_Open()
MsgBox "Running the Disable_Keys() Macro"
Call ThisWorkbook.Disable_Keys
End Sub
Sub MyMsg()
MsgBox "Press Another Key"
End Sub
Sub Disable_Keys()
Dim I As Long
Dim KeysArray As Variant
Dim Key As Variant
KeysArray = Array("@", "!", "~", "#", "$", "&", "|", "\", ":", "*", "_", "-", "=", "'", ";", "<", ">", "?", "/", "'", ":")
For Each Key In KeysArray
Application.OnKey Key, "ThisWorkbook.MyMSg"
Next Key
End Sub
Private子工作簿\u Open()
MsgBox“运行Disable_Keys()宏”
调用此工作簿。禁用\u键
端接头
次MyMsg()
MsgBox“按另一个键”
端接头
子禁用_键()
我想我会坚持多久
Dim键阵列作为变量
变暗键作为变量
KeysArray=Array(“@”、“!”、“~”、“#”、“$”、“&”、“|”、“\”、“:”、“*”、“”、“-”、“=”、“、”、“;”、“、”、“?”、“/”、“、“:”)
对于KeyArray中的每个键
Application.OnKey键,“ThisWorkbook.MyMSg”
下一键
端接头
这将检查是否存在非0-9、a-z或逗号的内容
如果要排除特定字符,则您可以更改.Pattern
如果它发现了什么,那么该单元格无效,它将清除该单元格
Private子工作表\u更改(ByVal目标作为范围)
暗淡试验室
作为对象的模糊RE
作为对象的暗重匹配
Set RE=CreateObject(“vbscript.regexp”)
带RE
.MultiLine=False
.Global=False
.IgnoreCase=True
.Pattern=“[^0-9A-Z,]”
以
对于Target.Cells中的每个TestCell
设置重新匹配=重新执行(TestCell.Value)
如果重新匹配。计数>0,则
MsgBox“无效:”&TestCell.Address&“-”&TestCell.Value
TestCell.Value=“”
如果结束
下一个
端接头
为什么不直接使用数据验证?例如,您可以在这里修改我的答案,我对数据验证不太了解。您可以指定如何只允许某些单元格使用字母数字字符和逗号。请使用问题的公认答案brettdj posted。在数据有效性的excel对话框中,您可以使用“自定义/用户定义”标准并指定公式,或者在特定情况下指定更好的公式:使用“列表”;)