У меня есть пользовательская форма с несколькими элементами управления (текстовое поле).Эти текстовые поля будут заполнены путем выбора элемента ListBox.При инициализации пользовательской формы эти текстовые поля будут назначены определенному классу, который их обрабатывает.
Я хочу, чтобы VBA изменил цвет фона этих текстовых полей только тогда, когда было выполнено реальное изменение значения.У меня есть то, что BackgroundColor всегда изменяется, как только изменение было выполнено, но это не то, что я хочу.
Пример # 1: Значение текстового поля перед изменением:"test" Значение текстового поля после изменения:"test2" -> BackgroundColor должно быть изменено
Пример # 2: Значение текстового поля до изменения:"тест" Значение текстового поля послеизменить:"test bla", но потом я снова набираю "test".-> BackgroundColor не должен быть изменен, потому что начальное значение снова находится в TextBox снова.
Что у меня есть:
' **************************************************************
' Module: clsTextbox Typ = Class Module
' **************************************************************
Public WithEvents mTextBoxs As MSForms.TextBox
Private Sub mTextBoxs_Change()
If mTextBoxs.Text = strInitialVal Then
Reset_BackColor
Else
mTextBoxs.BackColor = RGB(255, 255, 153)
End If
End Sub
Public Sub Reset_BackColor()
mTextBoxs.BackColor = RGB(255, 255, 255)
End Sub
' **************************************************************
' Module: frmEmployee Type = Userform
' **************************************************************
Dim arrLabels() As New clsLabel, UBoundarrLabels As Integer
Dim arrTextBoxs() As New clsTextbox, UBoundarrTextBoxs As Integer
Private Sub UserForm_Initialize()
Dim Ctrl As Control, obLabel As MSForms.Label, obTextbox As MSForms.TextBox
tblName = "tblMitarbeiter"
Set wb = ThisWorkbook
Set ws = wb.Sheets("Mitarbeiter")
i = 0
For Each Ctrl In Me.Controls
If Left(Ctrl.Name, 7) = "TextBox" Then
i = i + 1
ReDim Preserve arrTextBoxs(i)
Set obTextbox = Me.Controls("TextBox" & i)
Set arrTextBoxs(i).mTextBoxs = obTextbox
End If
Next Ctrl
' Fill Listbox1 with values (Vorname & Nachname) from Table [tblMitarbeiter]
Dim lngLastRow As Long: lngLastRow = getListLastRow(ws, tblName)
Dim vArrListBox1() As Variant
ReDim vArrListBox1(0 To lngLastRow - 1, 0 To 2)
For j = 1 To lngLastRow
vArrListBox1(j - 1, 0) = ws.ListObjects("tblMitarbeiter").DataBodyRange(j, 1).Value
vArrListBox1(j - 1, 1) = ws.ListObjects("tblMitarbeiter").DataBodyRange(j, 2).Value
vArrListBox1(j - 1, 2) = ws.ListObjects("tblMitarbeiter").DataBodyRange(j, 3).Value
Next j
For t = 1 To 4
Me.Controls("TextBox" & t) = vArrEmployee(t - 1)
Next t
strInitialVal = Me.Controls("TextBox2")
End Sub
Мои мыслиявляются: Как вы можете видеть, я пытался объявить открытую переменную (strInitialVal) в модуле, который получает начальное значение текстового поля (например, TextBox2), и при выполнении события mTextBoxs_Change () он проверяет, является ли strInitialVal тем жев качестве значения в текстовом поле и так далее.-> это работает, но только для отношения 1: 1 переменной и текстового поля.
Как мне удается загрузить все значения текстового поля в массив?и проверьте значения в классе TextBox впоследствии.
Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.Надеюсь, я не нарушил никаких SO-правил.