Excel VBA: события KeyPress должны запускать новую форму пользователя - PullRequest
0 голосов
/ 15 января 2019

Я работаю над программой с пользовательской формой со многими текстовыми полями:

enter image description here

(надеюсь, все понимают по-немецки)

Событие, когда пользователь пытается что-то набрать в желтых текстовых полях, должно вызвать появление новой пользовательской формы:

enter image description here

Эта пользовательская форма содержит увеличенное текстовое поле с большим пространством для ввода большого текста. После нажатия кнопки «Speichern» вторая пользовательская форма выгружается, и текст появляется в исходном текстовом поле в первой пользовательской форме. Поэтому у меня есть модуль класса для вызова события Keypress, которое вызывает вторую пользовательскую форму.

Моя проблема : я хочу, чтобы первая нажатая клавиша, которая вызывает событие, была видна во втором текстовом поле пользовательской формы.

Пример: Я выбираю третье желтое текстовое поле. Я хочу ввести «Это комментарий». При нажатии на первую клавишу «T» новая пользовательская форма открывается уже с буквой «T» в текстовом поле, поэтому я могу продолжать писать оставшуюся часть текста и не вводить снова букву «T».

До сих пор: У меня есть рабочий код для запуска события нажатием клавиши. Поэтому я работаю с модулем класса и подпрограммой инициализации пользовательской формы. К сожалению, текстовое поле не показывает уже первый ключ, который вызвал событие.

Модуль моего класса:

Public WithEvents TextBoxEvents As msforms.TextBox
'referring to all textboxes(addmaterialuserform) ~~> restriction in Addmaterialuserform / Userform-Initialize Sub

Private Sub TextBoxEvents_KeyPress(ByVal Keyascii As msforms.ReturnInteger)
'Keypress-event start by clicking any button on keyboard
'for more information https://docs.microsoft.com/de-de/office/vba/api/access.textbox.keypress

Keyascii = 0    'return value ~~> 0 for no return value
UserForm2.CommentBoxUserform.Value = TextBoxEvents.Value     'if small textbox already owns a string it'll be showed in userform (big) textbox
DataBaseSheet.Cells(3, 3).Value = TextBoxEvents.Tag     'saves tag (name) of active comment box to fill up later with string of big textbox

userform2.Show

End Sub

Userform Sub:

Private Sub UserForm_Initialize()
'all comment-textboxes have same properties to find in TextBoxClass
'when pressed any keyboard button the addcommentuserform will be opened to have a much bigger textbox to enter comment

    Dim myTBs()     As New TextBoxClass     'reference to TextBoxclass for Userform-initialize sub
    Dim i           As Integer
    Dim objControl  As Control

    For Each objControl In Me.Controls
         If TypeOf objControl Is msforms.TextBox Then
            Select Case objControl.Name     'selects only comment-textboxes by referring to their name
                Case "C1", "C2", "C3", "C4", "C5", "C6", "C7", "C8", "C9", "C11", "C12", "C13", "C14", "C15", "C16" '<~~ Include only these"
                    i = i + 1
                    ReDim Preserve myTBs(1 To i)    'call textboxclass
                    Set myTBs(i).TextBoxEvents = objControl
            End Select
        End If
    Next objControl
    Set objControl = Nothing

End Sub

1 Ответ

0 голосов
/ 15 января 2019

Используйте значение Keyascii, но перед тем, как установить его на 0:

Private Sub TextBoxEvents_KeyPress(ByVal Keyascii As msforms.ReturnInteger)

Userform2.CommentBoxUserform.Value = TextBoxEvents.Value & Chr(Keyascii)
Keyascii = 0    'return value ~~> 0 for no return value
DataBaseSheet.Cells(3, 3).Value = TextBoxEvents.Tag     'saves tag (name) of active comment box to fill up later with string of big textbox

userform2.Show 

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...