Привет всем.
Первый раз пишу макрос на VBA для Word-a. И вот возникли пару вопросов.
Есть форма, на ней две кнопки: Ok и Cancel, и EditBox.
Так вот вопрос первый: Как установить стиль Edit чтобы вводить только цифры?
Второй:
В коде макроса делаю Show этой формы.
В коде формы по нажатию либо Ok либо Cancel делаю Hide форме.
Но как мне из кода макроса узнать какая из этих кнопок была нажата?
Помогите PLZ. Век не забуду.
Заранее спасибо.
Hедопитая бутылка подобна высшему образованию — когда-нибудь потом обязательно пригодится. ICQ#7981430
Re: Несколько вопросов по VBA
От:
Аноним
Дата:
03.10.03 10:32
Оценка:
Здравствуйте, Zinya, Вы писали:
Z>Привет всем. Z>Первый раз пишу макрос на VBA для Word-a. И вот возникли пару вопросов.
Z>Есть форма, на ней две кнопки: Ok и Cancel, и EditBox.
Z>Так вот вопрос первый: Как установить стиль Edit чтобы вводить только цифры?
На TextBox1_Change() делай проверку. Например:
Private Sub TextBox1_Change()
TextBox1.Value = val(TextBox1.Value)
End Sub
Z>Второй: Z>В коде макроса делаю Show этой формы. Z>В коде формы по нажатию либо Ok либо Cancel делаю Hide форме. Z>Но как мне из кода макроса узнать какая из этих кнопок была нажата?
Я делал так:
В коде формы:
Public ExitCode as Boolean'OKButton - true, CancelButton - falsePrivate Sub CANCEL_Click()
ExitCode = false
Me.Hide
End Sub
Private Sub OK_Click()
ExitCode = true
Me.Hide
End Sub
В коде макроса:
UserForm1.Show vbModal
If UserForm1.ExitCode Then'ToDo OKButtonElse'ToDo CancelButtonEnd If
Unload UserForm1
Либо, если ты выгружаешь форму раньше — передавай код выхода через глобальную переменную.
Здравствуйте, Аноним, Вы писали:
Z>>Так вот вопрос первый: Как установить стиль Edit чтобы вводить только цифры? А>На TextBox1_Change() делай проверку. Например: А>
А>Private Sub TextBox1_Change()
А>TextBox1.Value = val(TextBox1.Value)
А>End Sub
А>
И что делать если не число. Надо бы сделать так чтобы в Edit-e вообще не отображались буквы.
Либо делать как-то Undo если вдруг ввели букву. Но как — вот вопрос.
Hедопитая бутылка подобна высшему образованию — когда-нибудь потом обязательно пригодится. ICQ#7981430
Здравствуйте, Zinya! Вы писали:
Z> Здравствуйте, Аноним, Вы писали:
Z>>> Так вот вопрос первый: Как установить стиль Edit чтобы вводить только Z>>> цифры? А>> На TextBox1_Change() делай проверку. Например: А>>
А>> Private Sub TextBox1_Change()
А>> TextBox1.Value = val(TextBox1.Value)
А>> End Sub
А>>
Z> И что делать если не число. Надо бы сделать так чтобы в Edit-e вообще не Z> отображались буквы. Либо делать как-то Undo если вдруг ввели букву. Но Z> как — вот вопрос.
Отслеживай
Private Sub Text1_KeyPress(KeyAscii As Integer)
if KeyAscii <> цифра then
KeyAscii = 0 ' игнорируемEnd if
End Sub
Правда остатся copy&paste так что обработку Change лучше оставить...
Здравствуйте, Zinya, Вы писали: Z>И что делать если не число. Надо бы сделать так чтобы в Edit-e вообще не отображались буквы.
А они и не будут отображаться в выше приведенном варианте. Z>Либо делать как-то Undo если вдруг ввели букву. Но как — вот вопрос.
Как, как. Головой подумал, а потом ручками...
Стандартный эдитбокс в VB не предусматривает ввод по маске.
Реализуй его самостоятельно. Можешь повесить обработку на:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
End Sub
или
Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
End Sub
И проверять. Если ввели букву — убрать последний символ.
Здравствуйте, Zinya, Вы писали:
Z>Привет всем. Z>Первый раз пишу макрос на VBA для Word-a. И вот возникли пару вопросов.
Z>Есть форма, на ней две кнопки: Ok и Cancel, и EditBox.
Z>Так вот вопрос первый: Как установить стиль Edit чтобы вводить только цифры? Z>Второй: Z>В коде макроса делаю Show этой формы. Z>В коде формы по нажатию либо Ok либо Cancel делаю Hide форме. Z>Но как мне из кода макроса узнать какая из этих кнопок была нажата?
Z>Помогите PLZ. Век не забуду.
Z>Заранее спасибо.
Я в таком случае вешаю на событие ONCHANGE текстового поля проверку на числовое значение известной функцией val(). Если значение текстового поля недопустимо, то просто блокирую клавишу OK. типа btnOk.enabled=false и командой btnOk.enabled=true если все верно. Спасает даже от ctrl/v. Только проверку приходится делать отдельной функцией на все элементы управления сразу, так как если такую проверку делать раздельно, то можно разблокировать OK правильным значением последнего редактируемого поля независимо от значения всех остальных
Здравствуйте, Zinya, Вы писали:
Z>Привет всем. Z>Первый раз пишу макрос на VBA для Word-a. И вот возникли пару вопросов.
Z>Есть форма, на ней две кнопки: Ok и Cancel, и EditBox.
Z>Так вот вопрос первый: Как установить стиль Edit чтобы вводить только цифры? Z>Второй: Z>В коде макроса делаю Show этой формы. Z>В коде формы по нажатию либо Ok либо Cancel делаю Hide форме. Z>Но как мне из кода макроса узнать какая из этих кнопок была нажата?
Z>Помогите PLZ. Век не забуду.
Z>Заранее спасибо.
Если ты говоришь об обработчиках событий для этих кнопок, то эти события нужно обрабатывать непосредственно в коде самой формы.
А по поводу стиля, мне лично пришлось писать целый набор функций для того, чтобы он мог распознавать цифры.