加载vba后,combox值未显示

时间:2016-05-15 10:26:31

标签: forms vba ms-access combobox

我有一个MS Access表单来输入采购订单。它是一个主要表单,包含一般订单详细信息 - 供应商名称,日期,然后是数据表视图中的子表单,用户将其放入实际订购的项目中。子表单中的第一个字段是用于选择项目的组合框,下一个字段是订购的数量,然后自动计算价格和总字段。

我希望组合框只显示属于主表单上选择的供应商的项目。我使用以下代码成功完成了此操作

Private Sub CmbSupplier_Change()

 Me!sfrmOrderDetail.Form!CmbItem.RowSource = "SELECT Items.ID, Items.Product, " _
                                           & "       Items.Supplier" _
                                           & " FROM tblItems" _ 
                                           & " WHERE ((Items.Supplier)= " _
                                                       & Me.CmbSupplier & ");"

End Sub

我也把它放到了Form_Current()事件中 - 所以当我换成新记录时它应该重做它。

然而,在输入几个订单后,我回到上一个订单,使用表单返回按钮检查我输入的内容,我看到其余的信息仍然存在,items字段(组合框) )子窗体的第一条记录是空的。填写了任何其他行。当我用光标进入那个空白区域时,它会刷新'并填写价值。

我很清楚,例如,我的第一个订单供应商是 Staples 。我的subfrom中有三行 - ink stapler paper 。离开记录并重新登录后,会发生以下情况:

  1. 墨水未显示,但订书机纸张以及墨水数量,价格和总数。
  2. 当我按下该字段时,它突然显示,我可以看到列出了正确项目的组合框列表,因此代码肯定有效。

1 个答案:

答案 0 :(得分:0)

我很确定这里会发生什么:

  • 您将返回现有记录
  • Access尝试在组合框中显示先前输入的项目,但不能,因为该值不是组合框行源的一部分
  • 然后Form_Current运行并将Rowsource更改为当前供应商
  • 但是CmbItem在您点击它之前不会选择它。

解决方案应该是添加

Me!sfrmOrderDetail.Form!CmbItem.Refresh
更改Rowsource后