Я предполагаю, что EquipmentRequest
было именем вашей формы, и Option Explicit
не указаны в верхней части модуля, чтобы требовать объявления переменной.
Без Option Explicit
неизвестный идентификатор (такой как EquipmentRequest
) молча превращается в локальную переменную Variant/Empty
... и когда для этой переменной выполняется вызов члена, происходит сбой с ошибкой 424, поскольку Empty
не является объектом, который вы можете сделать вызовом члена - следовательно, "объект требуется".
Похоже, вы были в процессе замены всех EquipmentRequest
ссылок на экземпляр по умолчанию формы квалификаторами Me
- но забыли несколько.
- Укажите
Option Explicit
в верхней части каждого модуля. Всегда. Сделай это привычкой. Код не скомпилируется, пока все переменные не объявлены.
- Удалите все / все ссылки на экземпляр формы по умолчанию (т. Е.
EquipmentRequest
, UserForm1
или любое другое имя вашей формы), замените их на Me
(то есть текущий экземпляр класса, на который вы смотрите).
Что касается огромного количества кода, то это потому, что Принцип единой ответственности - это ... ну, это просто поражение: большой кусок вверху отвечает за проверку формы - вытащите эту проблему в своя собственная процедура Например:
Private Sub TextBox1_Change()
ValidateForm
End Sub
Private Sub ValidateForm()
Dim validationErrors As Long
If Trim$(Me.TextBox1.Text) = vbNullString Then
Me.InvalidIconTextBox1.Visible = True
validationErrors = validationErrors + 1
Else
Me.InvalidIconTextBox1.Visible = False
End If
'...
Me.OkButton.Enabled = (validationErrors = 0)
End Sub
Где InvalidIconTextBox1
может быть элементом управления Image
с небольшим растровым изображением 16x16 и удобным текстом всплывающей подсказки - это устранит необходимость во всех этих вызовах MsgBox
и сделает все ошибки проверки видимыми сразу - и OkButton
невозможно щелкнуть с неверными данными.