Содержание
- Событие TextBox.Enter (Access)
- Синтаксис
- Замечания
- Пример
- Поддержка и обратная связь
- EnterKey to press button in VBA Userform
- 6 Answers 6
- TextBox.EnterKeyBehavior Property (Outlook Forms Script)
- Синтаксис
- Замечания
- Поддержка и обратная связь
- VBA Excel. Элемент управления TextBox (текстовое поле)
- Элемент управления TextBox
- Свойства текстового поля
- Привязка текстового поля к ячейке
- Vba excel textbox по нажатию enter
Событие TextBox.Enter (Access)
Событие Ввод возникает до того, как элемент управления фактически получает фокус от элемента управления в той же форме или отчете.
Синтаксис
expression. Введите
Выражение Переменная, представляющая объект TextBox .
Замечания
Это событие не применяется к флажкам, кнопкам параметров или переключателям в группе параметров. Он применяется только к самой группе параметров.
Чтобы выполнить макрос или процедуру события при возникновении этих событий, присвойте свойству OnEnter или OnExit имя макроса или [Процедура события].
Так как событие Ввод возникает до перемещения фокуса к определенному элементу управления, для отображения инструкций можно использовать макрос или процедуру события Enter. Например, можно использовать макрос или процедуру события, чтобы отобразить небольшую форму или окно сообщения, определяющие тип данных, которые обычно содержатся в элементе управления, или дать инструкции по использованию элемента управления .
Событие Ввод возникает перед событием GotFocus . Событие Exit возникает перед событием LostFocus .
В отличие от событий GotFocus и LostFocus события ВВОД и Выход не возникают, когда форма получает или теряет фокус. Например, предположим, что вы установите флажок в форме, а затем щелкните отчет. При установке флажка возникают события ВВОД и GotFocus . При щелчке отчета возникает только событие LostFocus . Событие Exit не возникает (так как фокус перемещается в другое окно). Если снова установить флажок на форме, чтобы вывести ее на передний план, возникает событие GotFocus , но не событие ВВОД (так как элемент управления был фокусом, когда форма была последней активной). Событие Exit возникает только при щелчке другого элемента управления в форме.
При перемещении фокуса на элемент управления в форме, а у этого элемента управления нет фокуса на этой форме, события Exit и LostFocus для элемента управления, который имеет фокус на форме, происходят до событий ВВОД и GotFocus для элемента управления, на который вы перемещены.
Если вы используете мышь для перемещения фокуса с элемента управления в основной форме в элемент управления в подформе этой формы (элемент управления, который еще не имеет фокуса на подчиненную форму), возникают следующие события:
- Выход (для элемента управления в основной форме)
- LostFocus (для элемента управления в основной форме)
- Введите (для элемента управления подчиненной формы)
- Выход (для элемента управления в подчиненной форме, в которой был фокус)
- LostFocus (для элемента управления в подчиненной форме, на которой был фокус)
- Введите (для элемента управления в подчиненной форме, в которую переместился фокус)
- GotFocus (для элемента управления в подчиненной форме, в которую переместился фокус)
Если элемент управления, к которому вы переходите в подчиненную форму, ранее был фокусирован, ни его событие ВВОД , ни событие GotFocus не возникает, но событие ВВОД для элемента управления подчиненной формы не возникает. При перемещении фокуса из элемента управления в подчиненную форму на элемент управления в основной форме события Exit и LostFocus для элемента управления в подчиненной форме не возникают, только событие Exit для элемента управления подчиненной формы и события ВВОД и GotFocus для элемента управления в основной форме.
Для перемещения фокуса на другой элемент управления часто используется мышь или клавиша, например TAB. Это приводит к возникновению событий мыши или клавиатуры в дополнение к событиям, описанным в этом разделе.
Пример
В следующем примере к текстовому поле LastName присоединяются две процедуры событий. Процедура события Ввод отображает сообщение с указанием типа данных, которые пользователь может ввести в текстовое поле. Процедура события Exit отображает диалоговое окно с запросом у пользователя, следует ли сохранить изменения, прежде чем фокус переместится на другой элемент управления. Если пользователь нажимает кнопку Отмена , аргумент Отмена имеет значение True (1), который перемещает фокус в текстовое поле без сохранения изменений. Если пользователь нажимает кнопку ОК , изменения сохраняются, а фокус перемещается на другой элемент управления.
Чтобы попробовать пример, добавьте следующую процедуру события в форму, содержащую текстовое поле LastName.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
EnterKey to press button in VBA Userform
I have a userform in Excel that asks for a username and password. Once you enter your password if you press Enter it just «selects» the next item which is the LogIn button, but it doesn’t press it. You have to hit Enter again to actually press the button.
How can I make it so when the user presses enter on his keyboard the LogIn button is pressed and the code associated to is runs ( Logincode_click )?
6 Answers 6
You could also use the TextBox’s On Key Press event handler:
Textbox1 is an example. Make sure you choose the textbox you want to refer to and also Logincode_Click is an example sub which you call (run) with this code. Make sure you refer to your preferred sub
Be sure to avoid «magic numbers» whenever possible, either by defining your own constants, or by using the built-in vbXXX constants.
In this instance we could use vbKeyReturn to indicate the enter key’s keycode (replacing YourInputControl and SubToBeCalled).
This prevents a whole category of compatibility issues and simple typos, especially because VBA capitalizes identifiers for us.
This one worked for me
Further to @Penn’s comment, and in case the link breaks, you can also achieve this by setting the Default property of the button to True (you can set this in the properties window, open by hitting F4 )
That way whenever Return is hit, VBA knows to activate the button’s click event. Similarly setting the Cancel property of a button to True would cause that button’s click event to run whenever ESC key is hit (useful for gracefully exiting the Userform)
Источник
TextBox.EnterKeyBehavior Property (Outlook Forms Script)
Возвращает или задает логическое значение, определяющее эффект нажатия клавиши ВВОД в TextBox. Для чтения и записи.
Синтаксис
expression. EnterKeyBehavior
Выражение Переменная, представляющая объект TextBox .
Замечания
True , если нажатие клавиши ВВОД создает новую строку, значение False при нажатии клавиши ВВОД перемещает фокус на следующий объект в порядке табуляции (по умолчанию).
Свойства EnterKeyBehavior и MultiLine тесно связаны. Значения, описанные выше, применимы, только если значение MultiLine равно True. Если значение MultiLine имеет значение False, нажатие клавиши ВВОД всегда перемещает фокус на следующий элемент управления в порядке табуляции независимо от значения EnterKeyBehavior.
Эффект нажатия клавиш CTRL+ВВОД также зависит от значения MultiLine. Если значение MultiLine имеет значение True, нажатие клавиш CTRL+ВВОД создает новую строку независимо от значения EnterKeyBehavior. Если значение MultiLine имеет значение False, нажатие клавиш CTRL+ВВОД не повлияет.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
VBA Excel. Элемент управления TextBox (текстовое поле)
Элемент управления пользовательской формы TextBox в VBA Excel. Использование текстового поля для ввода и вывода информации, основные свойства, примеры. Привязка текстового поля к ячейке.
Элемент управления TextBox
Текстовое поле незаменимо, когда необходимо заполнить пользовательскую форму новой информацией. Например, это может быть ФИО нового сотрудника и его паспортные данные, сумма выручки за день, новый электронный адрес и многое-многое другое.
Вводить информацию в TextBox на открытой форме можно не только с помощью клавиатуры, но и вставкой текста из буфера обмена. Когда текстовое поле применяется для ввода пароля, есть возможность отобразить все его знаки замещающим символом, например, звездочкой.
Свойства текстового поля
Свойство | Описание |
---|---|
AutoSize* | Автоподбор размера текстового поля. True – размер автоматически подстраивается под длину размещаемой строки. False – размер элемента управления определяется свойствами Width и Height. |
AutoTab | Включение автоматической табуляции – передачи фокуса следующему элементу управления при достижении максимального числа символов при значениях свойства MaxLenght > 0. True – автоматическая табуляция включена, False – выключена. |
ControlSource | Ссылка на источник данных для поля TextBox. |
ControlTipText | Текст всплывающей подсказки при наведении курсора на TextBox. |
Enabled | Возможность ввода, редактирования, копирования, вставки, удаления текста. True – все перечисленные опции включены, False – выключены (цвет текста в поле становится серым). |
Font | Шрифт, начертание и размер текста в поле. |
Height | Высота текстового поля. |
Left | Расстояние от левого края внутренней границы пользовательской формы до левого края текстового поля. |
Locked | Запрет ввода, редактирования, удаления текста. True – перечисленные опции запрещены (разрешено выделение и копирование текста), False – перечисленные опции разрешены. |
MaxLenght | Максимальная длина строки. По умолчанию – 0, что означает – ограничений нет. |
Multiline | Устанавливает многострочный (True) или однострочный (False) режим ввода-вывода текста. |
PasswordChar | Задает символ, который будет отображаться при вводе знаков пароля. |
TabIndex | Определяет позицию элемента управления в очереди на получение фокуса при табуляции, вызываемой свойством AutoTab или нажатием клавиш «Tab», «Enter». Отсчет начинается с 0. |
Text** | Текстовое содержимое (значение) поля (=Value). |
TextAlign | Выравнивание текста: 1 (fmTextAlignLeft) – по левому краю, 2 (fmTextAlignCenter) – по центру, 3 (fmTextAlignRight) – по правому краю. |
Top | Расстояние от верхнего края внутренней границы пользовательской формы до верхнего края текстового поля. |
Value** | Текстовое содержимое (значение) поля (=Text). |
Visible | Видимость текстового поля. True – TextBox отображается на пользовательской форме, False – TextBox скрыт. |
Width | Ширина текстового поля. |
WordWrap | Актуально при Multiline = True. Переход на новую строку при достижении границы текстового поля. True – переход включен, False – переход выключен. |
* При использовании свойства AutoSize в значении True следует учитывать, что автоматическое изменение размеров поля при вводе текста может нарушить дизайн пользовательской формы.
** Text и Value — это два обозначения одного и того же свойства. Если в окне Properties элемента управления TextBox в поле свойства Text начать ввод строки, в поле Value ввод будет дублироваться. И наоборот, при вводе текста в поле свойства Value, дублирование произойдет в поле Text.
В таблице перечислены только основные, часто используемые свойства текстового поля. Все доступные свойства отображены в окне Properties элемента управления TextBox.
Свойства BackColor, BackStyle, BorderColor, BorderStyle отвечают за внешнее оформление текстового поля и его границ. Попробуйте выбирать доступные значения этих свойств в окне Properties, наблюдая за изменениями внешнего вида элемента управления TextBox на проекте пользовательской формы.
Привязка текстового поля к ячейке
Привязать элемент управления TextBox к ячейке на рабочем листе можно двумя способами.
1. В окне Properties элемента управления TextBox в поле свойства ControlSource необходимо указать адрес ячейки:
2. Присвоить свойству ControlSource адрес ячейки в коде VBA Excel:
Источник
Vba excel textbox по нажатию enter
Snake68 » 12.08.2004 (Чт) 0:34
Доброе время суток!
Честное слово, пытался, как всегда разобраться сам, но, потерпел грустное поражение.
Загвоздка, да и сам вопрос, состоит в следующем: как в элемент управления TextBox вставить «Enter»?!
Поясню: имеется форма, которая, при нажатии на некую кнопку, выбрасывает еще одну форму поверх себя. Последняя (дочерняя) форма модальна (или немодальна — всегда путался в этом! Короче, пока не закроешь верхнюю форму, доступа к нижней нет) по отношению к нижней. На нижней (материнской) форме расположен большой TextBox, наполнение которого происходит из дочерней формы путем нажатия неких кнопок. В зависимости от положений радио, чекбоксов и листбоксов, по нажатию на некие кнопки в TextBox на материнской форме пишутся некие записи.
Причем, записи эти не обновляются каждый раз, а дописываются в конец предыдущих записей. В идеале, результат, полученный в TextBox должен выглядеть так:
Запись 1
Запись 2
Запись 3
.
Запись N
Я перепробовал все известные мне способы, но, к сожалению. Короче, ничего не получилось! Записи пишутся в строчку! Я пробовал в основном такие построения:
form1.TextBox1.text = form1.TextBox1.text + » » + «5» + chr (13)
Вместо «+» я пользовался и «&», но результат тот же. Я добился только вставки крокозямбры, вместо перевода строки. Возможно я использую не тот chr, может надо не (13), хотя логика подсказывает, что дело не в этом. Пробовал я такое построение в VB, который идет вместе с МС Оффисом — там все работает как надо. Я просто на лист вставлял текстбокс и кнопку. Пробовал и на форме в Ворде — опять работает! Может библиотеку какую подключить надо?! Так, вроде, одинаковые стоят.
Почему мне нужно использовать именно TextBox? Потому что результат полученный в нем мне нужно будет в именно таком виде скопировать в другую программу, документ и проч. Я взял TextBox, как наиболее доступный, понятный и простой элемент. А потом выяснилось, что я ошибся:-(
Я был бы очень Вам благодарен, если бы Вы смогли прояснить для меня
создавшуюся ситуацию или, даже, сказать как вставить перевод строки в
проклятый TextBox.
Заранее Вам большое спасибо за будущую возможную помощь.
Источник
To capture a specific key being pressed, you need the OnKey
method:
Application.OnKey "~", "myMacro" ' for the regular enter key
' or if you want Enter from the numeric keypad:
' Application.OnKey "{ENTER}", "myMacro"
' Below I'll just assume you want the latter.
The above says that myMacro
must be run when the Enter key is pressed. The OnKey
method only needs to be called once. You could put it in the Workbook_Open
event:
Private Sub Workbook_Open()
Application.OnKey "{ENTER}", "myMacro"
End Sub
To stop capturing the Enter key,
Application.OnKey "{ENTER}"
To check whether Enter was pressed while on cell A1, you could do this:
Sub myMacro()
If Not Intersect(Selection, Range("A1")) Is Nothing Then
' equivalent to but more flexible and robust than
'If Selection.Address = "$A$1" Then
MsgBox "You pressed Enter while on cell A1."
End If
End Sub
Now to detect if Enter was pressed in a specific cell only if that cell has been edited, we have to be a bit clever. Let’s say you edit a cell value and press Enter. The first thing that is triggered is the OnKey
macro, and after that the Worksheet_Change
event is triggered. So you first have to «save the results» of OnKey
, and then handle the Worksheet_Change
event based on those results.
Initiate OnKey
like this: Application.OnKey "{ENTER}", "recordEnterKeypress"
In your code module you would have this:
Public enterWasPressed As Boolean
Sub recordEnterKeypress()
enterWasPressed = True
End Sub
The cell edit will be captured by the Worksheet_Change
event:
Private Sub Worksheet_Change(ByVal Target As Range)
If enterWasPressed _
And Not Intersect(Target, Range("A1")) Is Nothing Then
MsgBox "You just modified cell A1 and pressed Enter."
End If
enterWasPressed = False 'reset it
End Sub
Now, the above code does what you ask in the question, but I would like to reiterate: your question sounds awfully like an XY problem. Why do you want to detect the Enter key being pressed? Let us know and maybe we can suggest alternatives.
В общем проблема состоит вот в чём. У меня есть форма, на ней куча текстбоксов, кнопок и меток (но это не важно). Каждый текстбокс и кнопка имеют свои определённые имена (не дефолтные). Мне на каждую кнопку и текстбокс нужно было привязать по одному обработчику одного события. И я воспользовался вот этим прекрасным методом:
1) Добавил класс cm_ControlsEvents, добавил ему необходимые контролы и соответствующие обработчики:
Код |
---|
Public WithEvents txbx As MSForms.TextBox Public WithEvents btn As MSForms.CommandButton Private Sub btn_Click() // выполняется код End Sub Private Sub txbx_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) // выполняется код End Sub |
2) Далее в ощем модуле объявил массив этих самых классов
Код |
---|
Public controlsArray() As New cm_ControlsEvents |
3) И в процессе инициализации формы я заполняю массив ссылками на соответствующие контролы:
Код |
---|
Private Sub UserForm_Initialize() Dim item As Control, countControls As Integer ReDim controlsArray(Me.Controls.Count) countControls = 0 For Each item In Me.Controls If TypeOf item Is MSForms.TextBox Then Set controlsArray(countControls).txbx = item item.TabStop = True countControls = countControls + 1 ElseIf TypeOf item Is MSForms.CommandButton Then If item.Tag = "Copy" Then Set controlsArray(countControls).btn = item item.TabStop = False countControls = countControls + 1 End If ElseIf Not TypeOf item Is MSForms.Label Then item.TabStop = False countControls = countControls + 1 End If Next item End Sub |
Тут в код можно особо не вникать, всё там нормально заполняется и работает.
И теперь по клику на любой из кнопок корректно срабатывает событие btn_Click() и, соответственно, при нажатии клавиш в текстбоксе чётко отрабатывает событие txbx_KeyPress().
В общем проблем не было до тех пор, пока мне не понадобилось использовать событие txbx_Enter(). Дело в том, что если я его добавляю в класс cm_ControlsEvents
Код |
---|
Public WithEvents txbx As MSForms.TextBox Public WithEvents btn As MSForms.CommandButton Private Sub btn_Click() // выполняется код End Sub Private Sub txbx_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) // выполняется код End Sub Private Sub txbx_Enter() // должен выполняться код End Sub |
то оно просто-напросто не срабатывает ни под каким предлогом. Однако если же я в модуле формы просто объявлю обработчик для какого-то конкретного текстбокса, вот так:
Код |
---|
Sub txbx_GPP_2_Enter() MsgBox "Event enter txbx!" End Sub |
то оно прекрасно срабатывает при фокусе на этом текстбоксе. Однако мне нужно этот обработчик поцепить на все текстбоксы в форме и я не понимаю почему именно это событие не срабатывает через класс cm_ControlsEvents.
Вот суть проблемы. Прошу гуру VBA поделиться дельным советом по этому поводу. Заранее благодарен
1 Answer
Try do it in Workbook_open event
Private Sub Workbook_Open()
Application.OnKey "{ENTER}", "MyEnterEvent"
End Sub
Sub MyEnterEvent
' codes here
End Sub
To end Macro
Application.OnKey "{ENTER}"
answered Jun 30, 2013 at 3:53
matzonematzone
2021 silver badge4 bronze badges
3
-
Thank you! It didn’t work at first, but I played around and got this:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Application.OnKey "~", "MyEnterEvent" End Sub
Jun 30, 2013 at 7:14
-
It should be unnecessary to keep re-assigning this key-event every time the selection changes. Obviously, I’m not aware of what your code actually does, but perhaps this key assignment could be made, and removed, on the sheet’s
Activate
andDeactivate
events.Jun 30, 2013 at 16:50
-
@AndyG .. thanx for your correction ..
Jun 30, 2013 at 17:03
To check the KeyPress event of «Enter» in user form.
A KeyPress event does not occur under the following conditions:
Pressing TAB.
Pressing ENTER.
Pressing an arrow key.
When a keystroke causes the focus to move from one control to another.
Therefore, if we would like to use an event Enter in Excel VBA, we should do as in the followings
—————————————————————————————
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then ‘we can use either 13 or vbKeyReturn
MsgBox «This messagebox will show after press Enter!»
End If
End Sub
—————————————————————————————
Below code is not working in Excel VBA
—————————————————————————————
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 13 Then
MsgBox «This procedure is not work for checking Enter event in Excel VBA!»
End If
End Sub
—————————————————————————————