Код VBA перестает работать - PullRequest
0 голосов
/ 01 декабря 2009

Следующий код вызывается при каждом открытии формы. Он прекрасно работает до 5-го открытия, а затем пропускает удаление одного из элементов управления. Кто-нибудь знает, почему это так?

 For Each cb In Forms(frmName).Controls
     If cb.ControlType = acCheckBox Then
         If Left(cb.Name, 3) = "clr" Then
            DeleteControl frmName, cb.Name
         End If
     ElseIf cb.ControlType = acLabel Then
         If Left(cb.Name, 3) = "clr" Then
            DeleteControl frmName, cb.Name
        End If
     End If
 Next

1 Ответ

2 голосов
/ 08 декабря 2009

Когда вы удаляете элемент из коллекции в Access, следующий элемент перемещается в это место. Таким образом, когда дело доходит до удаления элементов из коллекции, вы должны начать с конца коллекции и вернуться назад.

Так замените

For Each cb In Forms(frmName).Controls

строка с

For counter = Forms(frmName).Controls.Count - 1 To 0 Step -1
set cb = Forms(frmName).Controls.Item(counter)

Мой следующий вопрос: какова ваша главная цель? Необычно манипулировать элементами управления в режиме конструктора программно.

...