我有一个按钮,用于清除(搜索)窗体上的所有活动控件。但是,每个搜索的输出都显示在一个子窗体中,并且似乎以文本框的形式实现。 (虽然它显示为电子表格,子窗体的设计视图中显示的文本框)。VBA遍历主窗体上的控件而忽略子窗体
正因为如此,当我设置的形式""
所有acTextBox
控制的Value
,它会清除子窗体上的东西,以及并且所有进一步的搜索都会在所有字段中返回#Name,直到表单重新打开。
此外,虽然这个错误正在发生,点击窗体的Form
对象上产生一个信息,警告Object invalid or no longer set.
尝试编辑关联的方法往往造成的形式在设计视图中打开和取得焦点,其可以是或可以不是显著。 (这只要一个键被按下的方法,如果设计视图尚未打开时)。
这个问题似乎是在以下块:
Dim ctl As Control
For Each ctl In Me.Controls
If (ctl.ControlType = acTextBox) Then
If Len(ctl.Properties("ControlSource")) = 0 Then
ctl.Value = "" '***
End If
ElseIf ctl.ControlType = acCheckBox Then
ctl.Value = False
ElseIf ctl.ControlType = acComboBox Then
ctl.Value = ""
End If
Next ctl
分配之后'***
是在那里我已经缩小了问题的范围,因为注释该行可以防止问题的发生 - 但是由于将文本框的值设置为“”是我尝试执行的重要部分,所以我不能摆脱那。
ControlSource长度比较试图从下面的行中排除子表单项,因为它们都是绑定的,而主表单项不是。它是嵌套的(与If(...和...)相对),因为VBA没有懒惰Or。
需要做什么来遍历所有主窗体控件而不影响子窗体控件?
编辑:澄清子窗体/查询。
子窗体是从查询绘图数据用下面的语句:
SELECT DW_Query.Map_Number, DW_Query.Map_Name, DW_Query.Map_Type, DW_Query.Town, DW_Query.Address, DW_Query.Street, DW_Query.Block, DW_Query.Lot, DW_Query.group, DW_Query.Folder, DW_Query.Latitude, DW_Query.Longitude FROM DW_Query;
看起来好像镇场可以被莫名其妙地删除,因为有时是RTE 2465的一个实例,can't find the field 'Town' referred to in your expression.
然而这发生在主窗体的Form_Open子,以下行:
Me.DW_Query_subform.Form.RecordSource = "SELECT DW_Query.Map_Number, DW_Query.Map_Name, DW_Query.Map_Type, DW_Query.Town," & _
"DW_Query.Address, DW_Query.Street, DW_Query.Block, DW_Query.Lot, DW_Query.group, DW_Query.Folder, DW_Query.Latitude, DW_Query.Longitude " & _
"FROM DW_Query;" 'Set subform to use address query. (Faster)
记住子窗体是主窗体上的控制。但是,它不应该受到影响,因为您正在测试控制类型。你调试了代码吗? – PaulFrancis
是否为子表单设置了任何子/主字段? – Newd
我真的不完全确定你的意思是“调试代码”;我还不熟悉Access中的调试工具。我已经编译了没有错误,但没有设置断点或任何与立即窗口做任何事情(因为我不知道该怎么把它放在那里会有帮助)。 –