2016-08-20 8 views
2

В моем проекте VBA Excel-2013 у меня есть UserForm с текстовым полем. Мне нужно, чтобы это текстовое поле принимало только цифры, A-Z, a-z и 27 букв на иврите.excel vba проверить на иврит в введенном тексте, используя keypressii

Private Sub my_TextBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 
    If (Not (KeyAscii > 47 And KeyAscii < 58)) And _   <= 0-9 
     (Not (KeyAscii > 64 And KeyAscii < 91)) And _   <= A-Z 
     (Not (KeyAscii > 96 And KeyAscii < 123)) And _   <= a-z 
     (Not (KeyAscii > 127 And KeyAscii < 155)) Then   <= Hebrew 
      KeyAscii = 8 
      Beep 
    End If 
End Sub 

Работает отлично, за исключением иврита.
Он не распознает ASCII 128 по 154 как иврит (эти значения находятся в кодовом коде ASCII на стр. 862).
То есть, пытаясь напечатать ивритские буквы в текстовом поле, вы получите звуковой сигнал.
Как сказать Excel использовать код ASCII 862?

+0

попробуйте изменить шрифт или проверить, какие номера KeyAscii – Slai

+2

вы пробовали 'Debug.Print KeyAscii'? он должен рассказать вам, что было использовано ... –

+0

@ Dirk Reichel - Большое спасибо, Dirk. (Должен был подумать об этом сам ...). Похоже, ** еврейский алфавит в ASCII находится между 1488 и 1514 **. Сейчас работает отлично. Еще раз спасибо! – gadi

ответ

0

Dirk Reichel дал мне простую идею отладки и проверки того, что входит в my_TextBox при вводе в него иврита.
Вот как я нашел, что еврейский алфавит в ASCII находится между 1488 и 1514 годами.
Мой код теперь:

Private Sub my_TextBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 
    If (Not (KeyAscii > 47 And KeyAscii < 58)) And _   <= 0-9 
     (Not (KeyAscii > 64 And KeyAscii < 91)) And _   <= A-Z 
     (Not (KeyAscii > 96 And KeyAscii < 123)) And _   <= a-z 
     (Not (KeyAscii > 1487 And KeyAscii < 1515)) Then  <= Hebrew 
     KeyAscii = 8 
     Beep 
    End If 
End Sub 

Теперь она позволяет иврит тоже.
Спасибо, Дирк.