我目前正在开发一个工作报价表,我有21个组合框,它们都由同一行源填充。我遇到的问题是当我的所有组合框都设置为相同的控制源时,组合框中的所有列表值都被过滤并设置为一个值。例如,选择组合框1并选择准备现在其他20个组合框设置为准备,我不能选择其他选项。现在,如果我的组合框没有控制源,而不是之前的示例。如果我选择组合框1并将其设置为准备,那么我可以选择组合框2,3,4 ......并为每个组合框添加我想要的任何值。我希望每个组合框都有自己的值。
我希望组合框具有相同控制源的原因是,当组合框具有选定值时,它将向我的表添加新记录。因此,如果选择了10个组合框,那么当我单击添加记录按钮时,将会有10个新行添加到我的表中。
我在考虑可能有一个循环来完成工作,但是我不熟悉使用vba来运行sql?
答案 0 :(得分:1)
您无法使用相同的控件来源在同一表单上生成多个记录。他们必须是不受约束的。至少,我不知道如何以你设置的方式完成这项工作,但仍然可以提供帮助。
删除控制源,但保留行源。
您需要一个查询来将值保存到表中:
INSERT INTO MyTableName ([MyFieldName]) VALUES ('[ComboboxValue]');
复制此代码并粘贴到查询构建器中。覆盖" MyTableName"和" MyFieldName"使用适当的对象名称来保存单个组合框值。它一次只添加一行。 [ComboboxValue]
将是我们用于将每个组合值传递给要执行的查询的参数。
将查询命名为您想要的任何名称并保存。我将使用占位符" MyQuery,"确保你更新它!
在表单上创建一个命令按钮,并在其On Click事件中粘贴此VBA代码(您需要更新我使用Me!ComboboxName
的组合框引用):
Dim qdf As DAO.QueryDef
Dim combo As String
Set qdf = CurrentDb.QueryDefs("MyQuery")
combo = Me!Combobox1Name
qdf!ComboboxValue = combo
qdf.Execute
combo = Me!Combobox2Name
qdf!ComboboxValue = combo
qdf.Execute
'Copy those three lines for each combobox, adjust your combobox references accordingly,
'or use a loop
'End your procedure like this:
Set qdf = Nothing
如果您使用的是多列组合框,则可能需要将参考值从Me!Combobox1Name
调整为Me!Combobox1Name.Column(1)
。