Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access VBA代码停止工作_Ms Access_Vba - Fatal编程技术网

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次加载时失败。每一次。谢谢你的帮助!你的总体目标是什么?在设计视图中以编程方式操纵控件是不常见的。