更改所有表单上所有组合框对象的设置
Posted
技术标签:
【中文标题】更改所有表单上所有组合框对象的设置【英文标题】:Change a setting on all the combo box objects on all the forms 【发布时间】:2014-05-07 15:21:12 【问题描述】:tldr:如何依次引用每个表单上的每个组合框?
我在游戏后期发现组合框的默认值是“LimitToList = False”。这很糟糕,因为我有很多组合框,没有人应该通过在它们上面输入来添加或编辑任何东西。我的用户一直在这样做,我需要他们停止。
例如,我已经知道如何更改我的所有表单,以便拆分表单的方向是“底部的数据表”。也就是说,我已经解决了“打开所有表格,更改每个表格的设置,冲洗,重复”的问题。我所拥有的效果很好:
1 Public Sub MakeSplitFormsAllBottom()
2
3 Dim strForm As String, db As DAO.Database
4 Dim doc As DAO.Document
5 Set db = CurrentDb
6
7 For Each doc In db.Containers("Forms").Documents
8
9 strForm = doc.Name
10
11 DoCmd.OpenForm strForm, acDesign
12 Forms(strForm).SplitFormOrientation = 1
13
14 DoEvents
15 DoCmd.Close acForm, strForm, acSaveYes
16
17 Next doc
18
19 End Sub
问题是我不太清楚如何更改每个表单上所有组合框的设置。
我在 Google 上搜索了很多,但没有找到任何好的例子,所以我在黑暗中拍摄了(一堆)照片,通常看起来像这样:
1 Public Sub MakeAllCombosLimited()
2
3 Dim strForm As String, db As DAO.Database, obj As AccessObject, strObj As String
4 Dim doc As DAO.Document
5 Set db = CurrentDb
6
7 For Each doc In db.Containers("Forms").Documents
8
9 strForm = doc.Name
10
11 DoCmd.OpenForm strForm, acDesign
12
13 For Each obj In strForm
14 Forms(strForm).Controls(obj).LimitToList = True
15 DoEvents
16 Next obj
17
18 DoEvents
19 DoCmd.Close acForm, strForm, acSaveYes
20
21 Next doc
22
23 End Sub
我尝试过的任何方法都没有奏效。上面的那个给了我错误“For Each 只能迭代一个集合对象或一个数组。”我还尝试了以下变体:
7 For Each obj in db.Containers("Forms").Documents
仅引用整个数据库中的所有对象,但这也不起作用-我得到的是“未定义子或函数”,我猜这是因为您需要说该对象属于特定的表格。
说实话,我不确定我应该问什么问题。在我看来,底线是我至少需要知道以下一项:
-
如何引用/修改整个数据库中的所有组合框,或者
如何引用/修改给定表单中的所有组合框?
但我知道我不知道其中任何一个的答案。我觉得我让这件事变得比需要的更难。
【问题讨论】:
【参考方案1】:不确定这是否适用于 Access,但请尝试:
Dim ctrl as Control
For each ctrl in Form.Controls 'Revise to refer to your form object.
If TypeOf(ctrl) Is MSForms.ComboBox
'Do something with the ctrl, here:
'
'
End If
Next
【讨论】:
你让我走上了正确的道路!我将在数据库完成运行后立即发布我开始工作的代码。非常感谢!【参考方案2】:下面是一组代码,它实际上完成了我想要它做的事情:
1 Public Sub MakeAllCombosLimited()
2
3 Dim db As DAO.Database, strForm As String
4 Dim doc As DAO.Document
5 Set db = CurrentDb
6
7 For Each doc In db.Containers("Forms").Documents
8 strForm = doc.Name
9 DoCmd.OpenForm strForm, acDesign
10
11 For Each ctl In Forms(strForm).Controls
12
13 If ctl.ControlType = acComboBox Then
14 ctl.LimitToList = True
15 End If
16
17 Next ctl
18
19 DoEvents
20 DoCmd.Close acForm, strForm, acSaveYes
【讨论】:
以上是关于更改所有表单上所有组合框对象的设置的主要内容,如果未能解决你的问题,请参考以下文章