Forms 更改所有窗体上所有组合框对象的设置
tldr:如何依次引用每个表单上的每个组合框? 我在游戏后期发现,组合框的默认值是“LimitToList=False”。这非常糟糕,因为我有很多组合框,任何人都不应该通过在组合框上键入来添加或编辑任何内容。我的用户一直在这样做,我需要他们停止 我已经知道如何更改所有表单,例如,使拆分表单的方向为“底部的数据表”。也就是说,我已经解决了“打开所有表单,更改每个表单的设置,冲洗,重复”的问题。我所做的工作非常出色:Forms 更改所有窗体上所有组合框对象的设置,forms,ms-access,combobox,vba,Forms,Ms Access,Combobox,Vba,tldr:如何依次引用每个表单上的每个组合框? 我在游戏后期发现,组合框的默认值是“LimitToList=False”。这非常糟糕,因为我有很多组合框,任何人都不应该通过在组合框上键入来添加或编辑任何内容。我的用户一直在这样做,我需要他们停止 我已经知道如何更改所有表单,例如,使拆分表单的方向为“底部的数据表”。也就是说,我已经解决了“打开所有表单,更改每个表单的设置,冲洗,重复”的问题。我所做的工作非常出色: 1 Public Sub MakeSplitFormsAllBottom()
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
问题是我不太明白如何更改每个表单上所有组合框的设置
我在谷歌上搜索了很多次,没有找到任何好的例子,所以我在黑暗中拍摄了(一系列)照片,大致如下:
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
只引用整个数据库中的所有对象,但这也不起作用——“Sub或Function not defined”是我得到的,我猜这是因为你需要说对象属于特定的形式
老实说,我不确定我应该问什么问题。在我看来,底线是我至少需要知道以下一项:
但我知道我不知道这两个问题的答案。我觉得这比需要的更难了。不确定这在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
下面是一组代码,它们实际上完成了我希望它完成的任务:
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
你让我走上了正确的道路!我将在数据库运行完之后发布我需要处理的代码。非常感谢你!