Ms access VBA代码停止工作
每次打开表单时都会调用以下代码。它在第五次打开之前工作得很好,但是没有删除其中一个控件。有人知道这是为什么吗Ms access VBA代码停止工作,ms-access,vba,Ms Access,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 c
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
在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)
我的下一个问题是你的总体目标是什么?以编程方式在“设计”视图中操作控件是不常见的。这是VBA中集合的常见问题,按名称或从1到计数删除时,集合会失去顺序,Tony Toews建议的方法是通常的解决方案。Robert Harvey,您的解决方案可行,但您不了解Access中集合的性质以及它们在删除项时的工作方式。所以,是的,我很厚颜无耻。在VB和VB.Net中使用Step-1Robert Harvey也是很常见的-我确信所有其他语言和平台也有边缘案例。这当然假设这种行为是一种边缘情况。我也不相信微软曾经改变过Access中的这种行为。当然,我必须加载Access 2.0来检查。不管Tony Toews是否厚颜无耻都是对的。代码不是随机失败的,它会在一定数量的表单加载时失败,这取决于删除了多少个控件。例如,如果表单有8个控件,它将在第5次加载时失败,如果表单有16个控件,它将在第29次加载时失败。每一次。谢谢你的帮助!你的总体目标是什么?在设计视图中以编程方式操纵控件是不常见的。