На главную

Исходники

Программы

Сстатьи

Ссылки




Ударь по клавишам с помощью KeyAscii и VirtualKeyCodes

Отслеживание нажатия клавиш с помощью KeyAscii
Примеры
Виртуальные коды клавиш Windows
Таблица кодов KeyAscii
Таблица виртуальных кодов клавиш

Отслеживание нажатия клавиш с помощью KeyAscii

            Не редко при создании приложений на VBA, работая с формами, бывает необходимо ограничить ввод некоторых символов в текстовое поле TextBox. Рассмотрим несколько способов, чтобы решить эту проблему:
            Откройте новый проект, создайте форму и поместите на нее элемент TextBox1(Текстовое поле). Дважды щелкните на форме и добавьте в модуль формы такой код:

Private Sub TextBox1_KeyPress (ByVal KeyAscii _
As MSForms.ReturnInteger)
    If Chr(KeyAscii) < "0" Or Chr(KeyAscii) > "9" _
        And Chr(KeyAscii) < "А" Or Chr(KeyAscii) > "Я" _
        And Chr(KeyAscii) < "а" Or Chr(KeyAscii) >"я" Then
            MsgBox "Недопустимый символ!"
            KeyAscii = 0
    End If
End Sub

            Теперь в текстовое поле можно будет ввести только русские буквы и цифры, остальные символы будут игнорироваться. Вид кода немного пугает, но на самом деле здесь все просто. Давайте рассмотрим его подробнее:
    Private Sub TextBox1_KeyPress(ByVal KeyAscii _
    As MSForms.ReturnInteger)

            Это процедура обработки события KeyPress(Нажатия клавиш) для элемента TextBox1.Что-бы ее вызвать, нужно дважды щелкнуть на форме(на форме должен быть элемент TextBox), при этом откроется окно модуля формы. Вверху окна, слева, необходимо выбрать TextBox1, а справа KeyPress.

Oкно модуля формы

            Идем дальше. KeyAscii - аргумент возвращающий стандартный числовой код клавиши ANSI. То есть существует таблица кодов, в которой каждому символу на клавиатуре присвоено определенное число. Например: русская заглавная буква “А”=192, а маленькая “а”=224. Чтобы конвертировать числовое значение кода в строковое, применяется функция Chr, как в нашем примере(Chr(KeyAscii) < "А")
            Ну вот, самое сложное позади. Дальше проще:
Если код KeyAscii в таблице кодов находится в диапазоне от 48 до 57:
    (If Chr(KeyAscii) < "0" Or Chr(KeyAscii) > "9"),
и в диапазоне от 192 до 223:
    (And Chr(KeyAscii) < "А" Or Chr(KeyAscii) > "Я"),
и в диапазоне от 224 до 255:
    (And Chr(KeyAscii) < "а" Or Chr(KeyAscii) >"я" Then )
то данные символы будут доступны. Если нет, то символы будет отброшены(KeyAscii = 0) - нельзя будет их ввести.

Примеры

            Еще один пример, в котором в текстовое поле можно будет ввести только цифры:

Private Sub TextBox1_KeyPress (ByVal KeyAscii _
As MSForms.ReturnInteger)
    If KeyAscii < "48" Or KeyAscii > "57" Then
        MsgBox "Недопустимый символ!"
        KeyAscii = 0
    End If
End Sub

            Если количество недопустимых символов небольшое, то удобнее воспользоваться следующим кодом:

Private Sub TextBox1_KeyPress (ByVal KeyAscii _
As MSForms.ReturnInteger)
    Dim Symbol As String
''!@#$%^&*()_+= " - Эти символы будут игнорироваться
Symbol = "!@#$%^&*()_+="
    If InStr(1, Symbol, Chr(KeyAscii)) > 0 Then KeyAscii = 0
End Sub

            Можно сделать наоборот:

Private Sub TextBox1_KeyPress (ByVal KeyAscii _
As MSForms.ReturnInteger)
    Dim Symbol As String
''0123456789.-" - Можно ввести только эти символы
Symbol = "0123456789.-"
    If InStr(1, Symbol, Chr(KeyAscii)) > 0 Then
        Else
            KeyAscii = 0
    End If
End Sub

            Если нужно, чтобы при нажатии на одну клавишу в текстовое поле заносилось значение другой клавиши - вот пример:

Private Sub TextBox1_KeyPress (ByVal KeyAscii _
As MSForms.ReturnInteger)
    If KeyAscii = Asc("1") Then KeyAscii = Asc("7")
End Sub

            Здесь вместо "1" будет "7". Кстати функция Asc - необходима для форматирования строкового значения кода в числовой(Противоположна функции Chr см.выше)

Виртуальные коды клавиш Windows

            Виртуальные коды клавиш (Virtual Key Codes) очень похожи на коды KeyAscii, но их следует различать:

Private Sub TextBox1_KeyDown (ByVal KeyCode _
As MSForms.ReturnInteger, ByVal Shift As Integer )
    If KeyCode = vbKeyControl Then MsgBox "Нажата клавиша Ctrl "
    'Если нажат "Ctrl", то выскакивает сообщение
End Sub

            Здесь в отличии процедуры обработки события KeyPress, процедура KeyDown.Для ее вызова нужно дважды щелкнуть на форме (на форме должен быть элемент TextBox),при этом откроется окно модуля формы. Вверху окна, слева, необходимо выбрать TextBox1,а справа KeyDown(также, как для события KeyPress, см.выше).
vbKeyControl – константа описывающая клавишу "Ctrl"

Таблица кодов KeyAscii

Коды Англиских букв Коды Русских букв Коды цифр и знаков
A   65
B   66
C   67
D   68
E   69
F   70
G   71
H   72
I   73
J   74
K   75
L   76
M   77
N   78
O   79
P   80
Q   81
R   82
S   83
T   84
U   85
V   86
W   87
X   88
Y   89
Z  90






a  97
b  98
c  99
d  100
e  101
f  102
g  103
h  104
i  105
j  106
k  107
l  108
m  109
n  110
o  111
p  112
q  113
r  114
s  115
t  116
u  117
v  118
w  119
x  120
y  121
z  122






А   192
Б   193
В   194
Г   195
Д   196
Е   197
Ж   198
З   199
И   200
Й   201
К   202
Л   203
М   204
Н   205
О   206
П   207
Р   208
С   209
Т   210
У   211
Ф   212
Х   213
Ц   214
Ч   215
Ш   216
Щ   217
Ъ   218
Ы   219
Ь   220
Э   221
Ю  222
Я   223
а   224
б  225
в  226
г  227
д  228
е  229
ж  230
з  231
и  232
й  233
к  234
л  235
м  236
н  237
о  238
п  239
р  240
с  241
т  242
у  243
ф  244
х  245
ц  246
ч  247
ш  248
щ  249
ъ  250
ы  251
ь  252
э  253
ю  254
я  255
32 space
33  !
34   "
35  #
36  $
37  %
38  &
39  '
40  (
41  )
42  *
43  +
44   ,
45 -
46 .
47 /
48  0
49  1
50  2
51  3
52  4
53  5










54   6
55   7
56   8
57   9
58  :
59   ;
60  <
61 =
62  >
63  ?
64 @
91 [
92 \
93  ]
94  ^
95 _
96  `
123  {
124  |
125  }
126  ~











Таблица виртуальных кодов клавиш

Kонстанта
Клавиша Kонстанта Клавиша
vbKeyF1 От F1 vbKeyCapital Caps Lock
vbKeyF12 До F12 vbKeyEscape Esc
vbKeyA От A vbKeyReturn Enter
vbKeyZ До Z vbKeySpace Пробел
vbKeyBack BackSpace vbKeyShift Shift
vbKeyInsert Insert vbKeyTab TAB
vbKeyHome Home VbKeyControl CTRL
vbKeyPageUp Page Up vbKeyMenu ALT
vbKeyDelete Delete VbKeyLeft Стрелка влево
VbKeyEnd End VbKeyRight Стрелка в право
VbKeyPageDown Page Down VbKeyDown Стрелка в низ
vbKeyNumlock Num Lock VbKeyUp Стрелка вверх

На этом пока все. Успехов Вам!
С уважением
VBAmaker
vbamaker@yandex.ru




Hosted by uCoz