Перебирая коллекцию текстовых полей - PullRequest
0 голосов
/ 25 февраля 2011

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

Я сделал следующие объявления на уровне модуля.

Dim typSectFields, laneFields, matFields As Collection

Затем, когда пользовательская форма инициализирует I,добавить текстовые поля в коллекции:

Set typSectFields = New Collection

    With frmAddTypSect

        typSectFields.Add txtTypSectName
        typSectFields.Add txtStartSta
        typSectFields.Add txtEndSta
    End With

И затем, когда пользователь нажимает кнопку, которая использует входные данные из коллекции "typSectFields":

Dim tb As Control, res As VbMsgBoxResult

For Each tb In typSectFields
        If tb.Text = vbNullString And t.Tag <> vbNullString Then

            res = MsgBox("You've not completed the " + tb.Tag + " field. Would you like to complete it now?", vbYesNo + vbQuestion)

            If res = vbYes Then Exit Sub

        End If
Next

Я получаю "Объект"Обязательная "ошибка, когда выполнение попадает в цикл For.
VBE показывает, что tb = nothing и typSectFields = Empty.

Что я делаю не так?

1 Ответ

0 голосов
/ 25 февраля 2011

Убедитесь, что весь ваш код (в частности, объявления уровня модуля) находится в коде позади модуля формы. Для меня следующее работает без ошибок:

Dim typSectFields As Collection, laneFields As Collection, matFields As Collection

Private Sub CommandButton1_Click()
Dim tb As Control, res As VbMsgBoxResult

    For Each tb In typSectFields
        If tb.Text = vbNullString And tb.Tag <> vbNullString Then
            res = MsgBox("You've not completed the " + tb.Tag + " field. Would you like to complete it now?", vbYesNo + vbQuestion)

            If res = vbYes Then Exit Sub

        End If
    Next
End Sub

Private Sub UserForm_Initialize()
    Set typSectFields = New Collection

    With frmAddTypSect
        typSectFields.Add txtTypSectName
        typSectFields.Add txtStartSta
        typSectFields.Add txtEndSta
    End With

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