Word VBA: нацеливание на несколько полей ввода текста и изменение значения в _Enter () и _AfterUpdate () - PullRequest
0 голосов
/ 05 июля 2018

Я работаю с версией Office365 Word. У меня есть пользовательская форма VBA, которая содержит текстовые поля с вспомогательным текстом в качестве начального значения. Я использую код, приведенный ниже, чтобы очистить значения при вводе пользователем в текстовое поле и заново заполнить вспомогательный текст, если они оставят поле пустым:

Private Sub txtCount_Enter() 
'When the user enters the field, the value is wiped out
  With txtCount
    If .Text = "Count No" Then
      .ForeColor = &H80000008
      .Text = ""
    End If
  End With
End Sub

Private Sub txtCount_AfterUpdate() 
'If the user exits the field without entering a value, re-populate the default text
  With txtCount
    If .Text = "" Then
        .ForeColor = &HC0C0C0
        .Text = "Count No"
    End If
  End With
End Sub

В моей форме около десятка таких полей. Я знаю, что могу каким-то образом получить доступ к коллекции текстовых полей в форме, но могу ли я тогда вызвать действие для них? Может ли кто-нибудь дать мне пример, если это возможно?

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

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

Вам все равно потребуется заполнить текст по умолчанию в свойствах .Tag и .Text

Private Sub ToggleControl(ByRef TB As Control, ByVal Hide As Boolean)
    If Hide Then
        If TB.Text = TB.Tag Then
            TB.Text = ""
            TB.ForeColor = &H80000008
        End If
    Else
        If TB.Text = "" Then
            TB.Text = TB.Tag
            TB.ForeColor = &HC0C0C0
        End If
    End If
End Sub

Private Sub TextBox1_AfterUpdate()
    Call ToggleControl(TextBox1, False)
End Sub

Private Sub TextBox1_Enter()
    Call ToggleControl(TextBox1, True)
End Sub
0 голосов
/ 05 июля 2018

Поместите значение по умолчанию для каждого текстового поля в свойство .text и свойство .tag, чтобы этот код работал.

Когда вы вызываете ControlToggle (Boolean), он просматривает все элементы управления (но только целевые TextBoxes). Если вы передали True, он будет скрывать текст в элементе управления, если значение текстового поля является значением по умолчанию (находится в свойстве .tag). Если вы передадите False, он найдет все пустые поля и заполнит его полем по умолчанию.

Private Sub ControlToggle(ByVal Hide As Boolean)

    Dim oControl As Control
    For Each oControl In Me.Controls
        If TypeName(oControl) = "TextBox" Then
            If Hide Then
                If oControl.Text = oControl.Tag Then
                    oControl.Text = ""
                    oControl.ForeColor = &H80000008
                End If
            Else
                If oControl.Text = "" Then
                    oControl.Text = oControl.Tag
                    oControl.ForeColor = &HC0C0C0
                End If
            End If

        End If
    Next

End Sub
...