Несколько вопросов по VBA
От: Zinya Беларусь  
Дата: 03.10.03 09:04
Оценка:
Привет всем.
Первый раз пишу макрос на 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 - false
Private 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 OKButton
Else
'ToDo CancelButton
End If
Unload UserForm1

Либо, если ты выгружаешь форму раньше — передавай код выхода через глобальную переменную.
Re[2]: Несколько вопросов по VBA
От: Zinya Беларусь  
Дата: 03.10.03 11:17
Оценка:
Здравствуйте, Аноним, Вы писали:

Z>>Так вот вопрос первый: Как установить стиль Edit чтобы вводить только цифры?

А>На TextBox1_Change() делай проверку. Например:
А>
А>Private Sub TextBox1_Change()
А>TextBox1.Value = val(TextBox1.Value)
А>End Sub
А>

И что делать если не число. Надо бы сделать так чтобы в Edit-e вообще не отображались буквы.
Либо делать как-то Undo если вдруг ввели букву. Но как — вот вопрос.
Hедопитая бутылка подобна высшему образованию — когда-нибудь потом обязательно пригодится. ICQ#7981430
Re[3]: Несколько вопросов по VBA
От: GarryIV  
Дата: 03.10.03 12:06
Оценка:
Здравствуйте, 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 лучше оставить...
Posted via RSDN NNTP Server 1.7 "Bedlam"
WBR, Igor Evgrafov
Re[3]: Несколько вопросов по VBA
От: LantY Россия icq:56949749
Дата: 03.10.03 12:13
Оценка:
Здравствуйте, 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

И проверять. Если ввели букву — убрать последний символ.
С уважением, Дмитрий.
Re: Несколько вопросов по VBA
От: Xumpopena Россия scripting.fatal.ru
Дата: 03.10.03 21:33
Оценка:
Здравствуйте, 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 правильным значением последнего редактируемого поля независимо от значения всех остальных
Re: Несколько вопросов по VBA
От: Nektov Россия  
Дата: 08.10.03 06:40
Оценка:
Здравствуйте, Zinya, Вы писали:

Z>Привет всем.

Z>Первый раз пишу макрос на VBA для Word-a. И вот возникли пару вопросов.

Z>Есть форма, на ней две кнопки: Ok и Cancel, и EditBox.


Z>Так вот вопрос первый: Как установить стиль Edit чтобы вводить только цифры?

Z>Второй:
Z>В коде макроса делаю Show этой формы.
Z>В коде формы по нажатию либо Ok либо Cancel делаю Hide форме.
Z>Но как мне из кода макроса узнать какая из этих кнопок была нажата?

Z>Помогите PLZ. Век не забуду.


Z>Заранее спасибо.

Если ты говоришь об обработчиках событий для этих кнопок, то эти события нужно обрабатывать непосредственно в коде самой формы.
А по поводу стиля, мне лично пришлось писать целый набор функций для того, чтобы он мог распознавать цифры.
REPEAT [Design,Code,Test] UNTIL Money = 0
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.