如何使用VBA宏禁用excel工作表中的特殊字符

如何使用VBA宏禁用excel工作表中的特殊字符,excel,vba,Excel,Vba,嗨,我的主要目的是禁止用户在VBA中使用宏打开excel工作表后输入特殊字符 我试过怎么做。我为一个字符找到了一种方法 Sub Disable_Keys() Dim KeysArray As Variant Dim Key As Variant KeysArray = Array("@", "!", "~") 'Disable the StartKeyCombination key(s) with every key in the KeysArray

嗨,我的主要目的是禁止用户在VBA中使用宏打开excel工作表后输入特殊字符

我试过怎么做。我为一个字符找到了一种方法

Sub Disable_Keys()
    Dim KeysArray As Variant
    Dim Key As Variant

    KeysArray = Array("@", "!", "~")

    'Disable the StartKeyCombination key(s) with every key in the KeysArray
    For Each Key In KeysArray
        Application.OnKey Key, "myMsg"
    Next Key
End Sub

Sub myMsg()
    MsgBox "All keys are valid characters"
End Sub
这一个有问题,我只禁用该数组中的两个键。如果我加上3个像“~”这样的。那把钥匙不管用


如果您有任何其他解决方案,也请帮助我。

您的代码可以正常工作

问题是OnKey方法将
“~”
解释为Enter键。 要使tilde实际生效,请改为“{~}”。以下是关于

为了明确起见,请使用以下命令:
KeysArray=Array(“@”、“!”、“{}”)

编辑:由于评论,我只想添加一些您应该做的事情

您需要将列出的代码移动到
Workbook\u Open
事件中的
thiswoolk
模块。还应包括以下方法:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
        Dim KeysArray As Variant
        Dim Key As Variant

        KeysArray = Array("@", "!", "{~}")

        'Disable the OnKey settings with every key in the KeysArray
        For Each Key In KeysArray
            Application.OnKey Key, ""
        Next Key
End Sub

如果不包括此方法,则
KeysArray
中的键将尝试运行
MyMsg
子项,直到您关闭应用程序为止,即使工作簿已关闭。

是的,它对某些键有效,而对某些键无效,如^、%、(,)、+、{、},/。在编写宏并将其保存在excel工作表中后,我还需要一个帮助。我关闭了我的excel表格。现在我将键入键,但它允许键,因为我没有运行宏。如何在打开宏时隐式运行宏。从
工作簿\u Open
事件调用它。(我猜您的意思是“如何在打开工作簿时运行宏”。)