Как получить название выделенного текстового поля при нажатии на него - PullRequest
0 голосов
/ 02 марта 2020

Я пытаюсь сохранить имя выбранного текстового поля в виде строковой переменной. Это должно происходить, когда выбрано текстовое поле.

В кадре 100 или около того текстовых полей. Я попытался использовать функцию frame_enter() для запуска кода, а затем использовать me.frame.activecontrol.name для установки значения переменной, но текстовое поле activecontrol еще не было установлено с помощью этого метода и, следовательно, не будет работать.

Это работает, если я использую кнопку для запуска кода после того, как текстовое поле было выбрано, но я бы хотел, чтобы оно запускалось, как только я щелкнул по текстовому полю. Я мог бы использовать textbox_enter(), но для этого потребуется несколько строк кода для каждого текстового поля, поэтому я ищу более точное решение.

1 Ответ

0 голосов
/ 02 марта 2020

Вы можете использовать Class Module. Например, вы хотите захватить все клики, как вы говорите, на каждом Textbox в вашем Userform и получить соответствующее имя, вы можете попробовать:

  1. Создание Class Module с именем clsTextbox

    Option Explicit
    
    Public WithEvents tb As MSForms.TextBox
    
    Private Sub tb_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, _
                             ByVal X As Single, ByVal Y As Single)
      '// change this code to what you want done in Textbox name //
      MsgBox tb.Name & " was selected." 
    End Sub
    
  2. В вашем Userform инициализируйте все свои TextBox и передайте их вашему классу.

    Option Explicit
    
    Private allTextbox() As clsTextbox
    
    Private Sub UserForm_Initialize()
    
      Dim fC As MSForms.Control, tbCnt As Long
    
      With Me
        For Each fC In .Controls
          If TypeOf fC Is MSForms.TextBox Then
            tbCnt = tbCnt + 1
            ReDim Preserve allTextbox(1 To tbCnt)
            Set allTextbox(tbCnt) = New clsTextbox
            Set allTextbox(tbCnt).tb = fC
          End If
        Next
      End With
    
    End Sub
    

Теперь, каждый раз, когда вы нажимаете на любой Textbox в своей форме, вы получаете приглашение MsgBox.
Я немного поиграл с ним и, кажется, не могу заставить Enter() событие работать , Это несколько исключено из списка событий, которые могут быть обработаны с помощью класса (см. Ниже).

enter image description here

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