窗体加载事件给组合框赋上行来源并实现智能筛选
1.进入“frm采购订单_Edit_Detail”窗体的设计界面,再进入该窗体模块的VBA设计界面,在代码区的上部:
| Private mclsSC商品ID As New SearchComboBox |
2.在窗体的加载事件中写如下代码:
| mclsSC商品ID.Init Combo:= Me .商品ID, _ |
| SearchField:= "商品编码 & 品名规格 & 拼音码" , _ |
| SQLSELECT:= "商品ID, 商品编码, 品名规格, 单位, 最新进价 AS 单价" , _ |
还要在窗体关闭事件加句:
Private Sub Form_Close()
Set mclsSC供应商ID = Nothing
End Sub
设置商品ID组合框的属性
1.进入“frm采购订单_Edit_Detail”窗体的设计界面,选中组合框 “商品ID”,进入其属性界面,设置该组合框的以下属性:
列数:5 (代表一共有5列数据)
列标题:是
列宽:0;2.787;7.175;0.99;1.524(这里也可以输入:0;3;7;1;1.5 ----第1个为0代表第1列不显示)
列表宽度:14( 说明:只需要比上面5列的宽度之和大0.1就可以了,这样不致于有滚动条出现)
如下图所示:
2.保存刚才的设置。
商品编码发生重复时提醒操作员
在录入采购明细时,同一供应商同一采购单不应该发生同一商品编码录入2次的情形,如果有也应该合并为1条记录,因此,如果发生了重复,就应该提示操作员进行修改,分两步进行设计:
第1步:找到“TMP_采购订单明细表”,打开这个表,看有数据没有,如果有,则清空该表中的所有数据。然后进入该表的设计视图,将字段“商品ID”设置为主键或者将字段“商品ID”设置为 有索引(不重复)并且“必需”为否(这样当操作员录入重复数据时就会系统提示出错,接下来第2步的代码则会捕捉到这个错误号,从而显示第2步代码中自定义的人性化的错误提示)
第2步:在“frm采购订单_Edit_Detail”窗体的出错事件中写代码如下:
| Private Sub Form_Error(DataErr As Integer , Response As Integer ) |
| Const conDuplicateKey = 3022 |
| If DataErr = conDuplicateKey Then |
| Response = acDataErrContinue |
| strMsg = "商品编码不允许重复,请重新选择!" |
| MsgBox strMsg, vbCritical, "提示" |
人性化录入数据的思考
从3.1表设计中的采购订单明细表(点击此查看)的设计中可以看出,一共有5个字段:采购订单号、商品ID、数量、单价、完成数量。而之前我们设计的录入界面中,多了3个字段:品名规格、单位、单价(说明:即TMP_采购订单明细表,已入库数量就是完成数量)。
为何要多设计这3个字段呢?不设计不行吗?原因是:为了让操作人员可以方便的看到自已录入的信息,而不仅仅只是看到一个商品编码。因此,当操作员选择了某个商品编码时,若能自动带出相应的品名规格、单位、单价那是最好不过的了,如下图3个红框处所示:
返回页首
商品ID组合框的更新后事件
在前面的学习中,我们知道商品ID组合框一共有5列(第1列由于将列宽设置为0了,因而看不见),当操作员选择了某个商品编码时,通过组合框的Column属性,可以获取同一行相应列的值,例如:
me.组合框名称.Column(0)代表第1列,me.组合框名称.Column(1)代表第2列,以此类推。
进入“frm采购订单_Edit_Detail”窗体设计界面,在组合框商品ID的更新后事件中写以下代码:
| Private Sub 商品ID_AfterUpdate() |
| Me .品名规格 = Me .商品ID.Column(2) |
| Me .单位 = Me .商品ID.Column(3) |
| Me .单价 = Me .商品ID.Column(4) |
模拟一下录入明细订单的场景,如下图所示:
试想,如果操作员在录入后面的明细商品时,如果没有上图红框中的信息,并不影响软件的应用,但是操作员会感觉好累,因为若要知道商品编码相对应的信息时,还得去选择一下组合框才能查看到该商品编码对应的信息。
这样,我们就用VBA代码实现了当操作员选择某个商品编码时,自动给相应控件赋上了值,非常方便实用。