2009-12-01 4 views
0

다음 코드는 양식을 열 때마다 호출됩니다. 그것은 다섯 번째 열 때까지 작동하며 컨트롤 중 하나를 삭제하지 못합니다. 누구나 이것이 왜 있는지 압니까?VBA 코드 작동이 중지됨

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 
+0

전체적인 목표는 무엇입니까? 프로그래밍 방식으로 디자인보기에서 컨트롤을 조작하는 경우는 드뭅니다. –

답변

2

Access의 컬렉션에서 항목을 삭제하면 다음 항목이 해당 항목으로 이동합니다. 따라서 컬렉션에서 항목을 삭제할 때는 컬렉션의 끝에서 시작하여 뒤로 이동해야합니다.

그래서

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

나의 다음 질문 불구하고 전반적인 목적은 무엇과

For Each cb In Forms(frmName).Controls 

라인을 대체? 프로그래밍 방식으로 디자인보기에서 컨트롤을 조작하는 경우는 드뭅니다.

+0

VBA의 컬렉션에서 자주 발생하는 문제이며 컬렉션이 이름순으로 삭제되거나 1에서 개수로 삭제 될 때 순서가 손실되므로 Tony Toews가 제안한 방법이 일반적인 해결 방법입니다. – Fionnuala

+0

Robert Harvey, 솔루션은 작동하지만 Access에서 컬렉션의 특성과 항목을 삭제할 때 작동하는 방식을 이해하지 못했습니다. 그래서 예, 저는 건방진 것입니다. –

+0

또한 VB 및 VB.Net에서 Step-1을 사용하는 것이 일반적입니다. – Fionnuala

관련 문제