Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用VBA禁用Excel中每个单元格中的特定键_Excel_Vba - Fatal编程技术网

如何使用VBA禁用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

我有一个excel表格,用户将在每个单元格中输入元数据。我需要做的是编写一个宏,它只允许字母数字字符和逗号

我编写了一个宏用于测试,它不允许使用特殊字符。但当我在单元格中输入一个有效字符后,它允许我输入不允许的字符。我不知道如何纠正它

我的代码:

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对话框中,您可以使用“自定义/用户定义”标准并指定公式,或者在特定情况下指定更好的公式:使用“列表”;)