2009-12-01 108 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

您的總體目標是什麼?以編程方式在設計視圖中操作控件是很不尋常的。 – 2009-12-08 20:09:07

回答

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 2009-12-07 22:24:43

+0

羅伯特哈維,你的解決方案的工作原理,但你不明白Access中的集合的性質,以及它們在刪除項目時如何工作。所以是的,我很討厭。 – 2009-12-07 22:27:51

+0

在VB和VB.Net中也常見到使用步驟1 – Fionnuala 2009-12-07 22:33:41