Страница 1 из 2

Ввод текста на русском языке в Excel

Добавлено: 05 мар 2008, 06:50
sergo_ukr
Подскажите, как при открытии какой-нибудь формы ввода увтоматически установить язык ввода "русский"?
Дело в том, что при выполнении кода в русском MS Office при вводе цифры например 123.15, вместо 125,13 (точка вместо запятой) выполняемый код вылетает в отладку.
SendKeys "+^" не подходит, т.к. заранее неизвестно, какой язык в системе будет по умолчанию (у меня например английский, а у юзеров чаще русский). Да и переключение может осуществляться разной комбинацией клавиш.

Re: Ввод текста на русском языке в Excel

Добавлено: 05 мар 2008, 09:12
SAS888
sergo_ukr,
Можно воспользоваться WinApi- функцией. Например:
Объявление Win API функции:

Код: Выделить всё

Private Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" _
(ByVal pwszKLID As String, ByVal flags As Long) As Long
Private Const KLF_ACTIVATE = 1
Функция VBA Excel:

Код: Выделить всё

Public Sub SetLanguage(ByVal s As String)
Select Case UCase(Left(s, 1))
Case "R"
LoadKeyboardLayout "00000419", KLF_ACTIVATE
Case "E"
LoadKeyboardLayout "00000409", KLF_ACTIVATE
Case Else
End Select
End Sub
Запуск процедуры:

Код: Выделить всё

SetLanguage ("R")
Где, соответственно "R" - русский, "E" - английский. Не зависимо, какая раскладка установлена на текущий момент.

Re: Ввод текста на русском языке в Excel

Добавлено: 05 мар 2008, 09:38
sergo_ukr
Пробовал, не работает, ругается, что в объявлении API-функции не хватает окончания End Function. Пробовал подставлять его - все равно ругается.

Re: Ввод текста на русском языке в Excel

Добавлено: 05 мар 2008, 10:42
SAS888
В Excel 2003 попробовал копированием перенести в новый модуль то, что выложил - проблем нет.
Проверьте, что задано именно "Declare Function", а не просто "Function".

Re: Ввод текста на русском языке в Excel

Добавлено: 05 мар 2008, 11:01
Pavel55
Проще точку заменить на запятую

Код: Выделить всё

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

Re: Ввод текста на русском языке в Excel

Добавлено: 05 мар 2008, 11:41
Teslenko_EA
Здравствуйте sergo_ukr.
"язык в системе" нисколько не влияет на символ разделитель целой и дробной частей, который задается в национальных настройках.
В развитие предложения Pavel55, код обеспечивающий правильность числового ввода в поле формы:

Код: Выделить всё

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Dim s$
s = TextBox1.Text
If IsNumeric(Chr(KeyAscii)) Then
ElseIf KeyAscii = 46 Or KeyAscii = 44 Then
    KeyAscii = 44 '44, 46 - запятая или точка, согласно национальным настройкам системы
    If InStr(s, Chr(KeyAscii)) > 1 Then KeyAscii = 0 'запрет повторения разделителя
    If Len(s) = 0 Then KeyAscii = 0 'запрет лидирующего разделителя
Else
    KeyAscii = 0
End If
End Sub
Евгений.

Re: Ввод текста на русском языке в Excel

Добавлено: 05 мар 2008, 11:54
SAS888
Посмотри еще здесь: http://forum.ru-board.com/topic.cgi?for ... art=900#14

Re: Ввод текста на русском языке в Excel

Добавлено: 05 мар 2008, 11:59
sergo_ukr
Благодарю, вечером поэкспериментирую. Может есть еще какие варианты? Больше шансов, что один из них подойдет.

Re: Ввод текста на русском языке в Excel

Добавлено: 05 мар 2008, 12:09
sergo_ukr
Последний вариант (по ссылке) сработал, предыдущий не проверял, но все равно большое спасибо, в принципе меня устроит последний вариант.

Re: Ввод текста на русском языке в Excel

Добавлено: 14 май 2010, 15:31
algraf2000
Объясните пожалуйста для чайникофф
Я попытался вставить все три варианта в модуль между SUB и END SUB
В результате получил:
1.Compile error:
Only comments may appear after End Sub, End Function, or End Property
2.Compile error: Expected End Sub
3.Compile error:
Sub or Function not defined

Что я делаю не так? Может перед и после нужно еще что-то написать?