6.4 窗体对象程序模块代码设计
6.4.1,商品进货数据录入, 窗
体程序模块设计
6.4.2,商品上柜数据录入, 窗
体程序模块设计
6.4.3,销售数据录入, 窗体程
序模块设计
学习了 VBE编程环境,掌握了 VBA程序设
计基础,就应该通过实际的编程实践来完成
“零售商店管理信息系统”数据库中三个主
要窗体对象的功能实现了。
返回
6.4.1,商品进货数据录入”窗体程序模块设

首先进入“商品进货数据录入”窗体设计
视图。根据我们在 6.1节的分析,需要在
这个设计视图中,完成三段程序设计。
在“商品进货数据录入”窗体设计视图中,
选定标签为“进货货号”的文本框,假定
该文本框控件“名称”属性值为
,Text19”。调出属性对话框,选定“事
件”卡,在“更新后”事件行右侧单击
“生成器”按钮“”。在随即出现的“选
择生成器”对话框中,选中“代码生成器”
选项,然后单击“确定”按钮,进入 VBE
编程环境,如图 6-3所示。
然后,应该在代码窗口中输入如下程序代
码,编写完成后关闭 VBE,返回窗体设计
视图。
1.标签为“进货货号”的文本框数据更新事件
处理
Private Sub Text19_AfterUpdate()
Me![货号 ].SetFocus
DoCmd.FindRecord Me![Text19],,True,,True
If Me![货号 ] <> Me![Text19] Then
If MsgBox("增加一种新商品? ",vbOKCancel,"请确定! ") = vbOK Then
DoCmd.GoToRecord,,acNewRec
Me![货号 ] = Me![Text19]
Me![库存数量 ] = 0
Else
Exit Sub
End If
End If
Me![Text21] = Me![货名 ]
Me![text78] = Me![规格 ]
Me![text80] = Me![计量单位 ]
Me![Text25] = Me![进货单价 ]
Me![Text27] = 0
Me.Refresh
End Sub
表 6-12,商品进货数据录入”窗体中控件名称属性表
控件名称 伴随标签控件标题
Command35, 保存记录,
Text19, 货号,
Text78, 规格,
Text21, 进货货名,
Text25, 进货单价,
Text27, 进货数量,
Text29, 进货日期,
Combo41, 收货人,
Combo45, 供货商,
?在“商品进货数据录入”窗体设计视图中,
选定“保存记录”命令按钮,假定该命令
按钮控件“名称”属性值为
,Command35”。调出属性对话框,选定
“事件”卡,在“更新后”事件行右侧单
击“生成器”按钮“”。在随即出现的
“选择生成器”对话框中,选中“代码生
成器”选项,然后单击“确定”按钮“”,
进入 VBE编程环境。
?然后,在 VBE代码窗口中输入如下程序代
码,编写完成后关闭 VBE,返回窗体设计
视图。
2.“保存记录”命令按钮单击事件处理
? Private Sub Command35_Click()
? Me![货名 ] = Me![Text21]
? Me![规格 ] = Me![text78]
? Me![计量单位 ] = Me![text80]
? Me![库存数量 ] = Me![库存数量 ] +
Me![Text27]
? Me![进货单价 ] = Me![Text25]
? Me![收货人 ] = Me![Combo41]
? Me![供货商 ] = Me![Combo45]
? Me![进货日期 ] = Me![Text29]
? DoCmd.DoMenuItem acFormBar,
acRecordsMenu,acSaveRecord,,acMenuVer70
? Me.Refresh
? End Sub
?在“商品进货数据录入”窗体设计视图中,
选定“退出”命令按钮,假定该命令按钮
控件“名称”属性值为,Command47”。调
出属性对话框,选定“事件”卡,在“更
新后”事件行右侧单击“生成器”按钮,
即可直接进入 VBE编程环境。这是由于在
第 5章创建该命令按钮控件时,我们在
Access 2003向导的引领下完成了这个命令
按钮功能设定:关闭本窗体。
?然后,在 VBE代码窗口中可以看到如下程
序代码,无须加以改动即可关闭 VBE,返
回窗体设计视图。
3.“退出”命令按钮单击事件处理
?Private Sub Command47_Click()
?On Error GoTo
Err_Command47_Click
? DoCmd.Close
?Exit_Command47_Click:
? Exit Sub
?Err_Command47_Click:
? MsgBox Err.Description
? Resume Exit_Command47_Click
?End Sub
首先进入, 商品上柜数据录入, 窗体
设计视图 。 根据我们在 6.1节的分析,
需要在这个设计视图中, 完成四段
程序设计 。
6.4.2,商品上柜数据录入”窗体程序模块设

1.标签为“商品货号”的文本框数据更新事件处
理在“商品上柜数据录入”窗体设计视图中,
选定标签为“商品货号”的文本框,假定该
文本框控件“名称”属性值为,Text19”。
调出属性对话框,选定“事件”卡,在“更
新后”事件行右侧单击“生成器”按钮。在
随即出现的“选择生成器”对话框中,选中
“代码生成器”选项,然后单击“确定”按
钮,进入 VBE编程环境,如图 6-3所示。
然后,应该在代码窗口中输入如下程序代码,
编写完成后关闭 VBE,返回窗体设计视图。
? Private Sub Text19_AfterUpdate()
? Me![货号 ].SetFocus
? DoCmd.FindRecord Me![Text19],,True,,True
? If Me![货号 ] <> Me![Text19] Then
? If MsgBox("货号输入错误! ",vbOKCancel,"错误! ") = vbOK Then
? Me![Text19].SetFocus
? Else
? Me![Text19].SetFocus
? End If
? Else
? Me![Text21] = Me![货名 ]
? Me![Text25] = Me![进货单价 ]
? Me![Text27] = 0
? Me.Refresh
? Me![柜存数据记录子窗体 ].SetFocus
? DoCmd.FindRecord Me![Text19],,True,,True
? Me![Text27].SetFocus
? End If
? End Sub
表 6-13,商品上柜数据录入”窗体中控件名称属性表
控件名称 伴随标签控件标题
Command35, 保存数据,
Text19, 商品货号,
Text21, 商品名称,
Text25, 销售单价,
Text27, 上柜数量,
Text29, 上柜日期,
Text52, 本次上柜商品个数,
Text54, 本次上柜商品金额,
Combo45, 营业员,
Combo58, 上柜人,
2.“保存数据”命令按钮单击事件处理
在“商品上柜数据录入”窗体设计视图中,
选定“保存数据”命令按钮,假定该命令
按钮控件“名称”属性值为,Command35”。
调出属性对话框,选定“事件”卡,在
“更新后”事件行右侧单击“生成器”按
钮。在随即出现的“选择生成器”对话框
中,选中“代码生成器”选项,然后单击
“确定”按钮,进入 VBE编程环境。
然后,在 VBE代码窗口中输入如下程序代
码,编写完成后关闭 VBE,返回窗体设计
视图。
? Private Sub Command35_Click()
? Me![柜存数据记录子窗体 ].SetFocus
? DoCmd.FindRecord Me![Text19],,True,,True
? If Me![柜存数据记录子窗体 ]![货号 ] <> Me![Text19] Then
? DoCmd.GoToRecord,,acNewRec
? Me![柜存数据记录子窗体 ]![柜存数量 ] = 0
? End If
? Me![柜存数据记录子窗体 ]![货号 ] = Me![Text19]
? Me![柜存数据记录子窗体 ]![货名 ] = Me![Text21]
? Me![柜存数据记录子窗体 ]![规格 ] = Me![规格 ]
? Me![柜存数据记录子窗体 ]![计量单位 ] = Me![计量单位 ]
? Me![柜存数据记录子窗体 ]![销售单价 ] = Me![Text25]
? Me![柜存数据记录子窗体 ]![柜存数量 ] = Me![Text27] + Me![柜存数
据记录子窗体 ]![柜存数量 ]
? Me![柜存数据记录子窗体 ]![上柜日期 ] = Me![Text29]
? Me![柜存数据记录子窗体 ]![营业员 ] = Me![Combo45]
? Me![柜存数据记录子窗体 ]![上柜人 ] = Me![Combo58]
? Me![Text52] = Me![Text52] + Me![Text27]
? Me![Text54] = Me![Text54] + Me![Text27] * Me![Text25]
? Me![库存数量 ] = Me![库存数量 ] - Me![Text27]
? Me.Refresh
? End Sub
3.“退出”命令按钮单击事件处理
在“商品上柜数据录入”窗体设计视图中,
选定“退出”命令按钮,假定该命令按钮控
件“名称”属性值为,Command47”。调出
属性对话框,选定“事件”卡,在“更新后”
事件行右侧单击“生成器”按钮“”,即可
直接进入 VBE编程环境。这是由于在第 5章
创建该命令按钮控件时,我们在 Access 2003
向导的引领下完成了这个命令按钮功能设定:
关闭本窗体。
然后,在 VBE代码窗口中可以看到如下程序
代码,无须加以改动即可关闭 VBE,返回窗
体设计视图。
? Private Sub Command47_Click()
? On Error GoTo Err_Command47_Click
? DoCmd.Close
? Exit_Command47_Click:
? Exit Sub
? Err_Command47_Click:
? MsgBox Err.Description
? Resume Exit_Command47_Click
? End Sub
? 在“商品上柜数据录入”窗体设计视图中,
选定“查阅库存商品数据记录”命令按钮,
假定该文本框控件“名称”属性值为“命令
63”。调出属性对话框,选定“事件”卡,在
“更新后”事件行右侧单击“生成器”按钮
“”,即可直接进入 VBE编程环境。这是由
于在第 5章创建该命令按钮控件时,我们在
Access 2003向导的引领下完成了这个命令按
钮功能设定:打开一个名为“商品库存数据
查询”的窗体。
? 然后,在 VBE代码窗口中可以看到如下程序
代码,无须加以改动即可关闭 VBE,返回窗
体设计视图。
4.“查阅库存商品数据记录”命令按钮单击事件处

? Private Sub 命令 63_Click()
? On Error GoTo Err_命令 63_Click
? Dim stDocName As String
? Dim stLinkCriteria As String
? stDocName = "商品库存数据查询 "
? DoCmd.OpenForm stDocName,,,stLinkCriteria
? Exit_命令 63_Click:
? Exit Sub
? Err_命令 63_Click:
? MsgBox Err.Description
? Resume Exit_命令 63_Click
? End Sub
6.4.3,销售数据录入”窗体程序模块设

?首先进入“销售数据录入”窗体设计视
图。根据我们在 6.1节的分析,需要在这
个设计视图中,完成五段程序设计。
1.标签为“营业员”的组合框数据更新事件处

? 在“商品上柜数据录入”窗体设计视图中,选
定标签为“商品货号”的文本框,假定该组合
框控件“名称”属性值为,Combo45”。调出
属性对话框,选定“事件”卡,在“更新后”
事件行右侧单击“生成器”按钮“”。在随即
出现的“选择生成器”对话框中,选中“代码
生成器”选项,然后单击“确定”按钮“”,
进入 VBE编程环境,如图 6-3所示。
? 然后,应该在代码窗口中输入如下程序代码,
编写完成后关闭 VBE,返回窗体设计视图。
? Private Sub Combo45_AfterUpdate()
? Me.Refresh
? End Sub
? 实际上,这个组合框控件已经在第 5章的学习
中设计完成,此处的“更新后”事件处理方法
仅包含一句代码,怎么可能实现预定的功能呢?
这里需要用到第 4章介绍的查询对象设计上。
? 在第 4章中,我们曾经为“销售数据录入”窗
体中的子窗体设计了一个查询对象,名为“销
售数据记录查询”。其中包含着这样一个查询
条件,(销售数据记录,销售日期 )=[Forms]![销
售数据录入 ]![Text29]) AND ((销售数据记录,销
售人员 )=[Forms]![销售数据录入 ]![Combo45]),
参见图 4-12。
表 6-14,销售数据录入”窗体中控件名称属性表
控件名称 伴随标签控件标题
Command35, 现金收讫,
Text19, 商品货号,
Text21, 商品名称,
Text25, 销售单价,
Text27, 销售数量,
Text29, 销售日期,
Text52, 商品个数,
Text54, 应收商品金额,
Combo45, 营业员,
2.标签为“商品货号”的文本框数据更新事件处

? 在“销售数据录入”窗体设计视图中,选定标
签为“商品货号”的文本框,假定该文本框控
件“名称”属性值为,Text19”。调出属性对话
框,选定“事件”卡,在“更新后”事件行右
侧单击“生成器”按钮“”。在随即出现的
“选择生成器”对话框中,选中“代码生成器”
选项,然后单击“确定”按钮“”,进入 VBE
编程环境,如图 6-3所示。
? 然后,应该在代码窗口中输入如下程序代码,
编写完成后关闭 VBE,返回窗体设计视图。
? Private Sub Text19_AfterUpdate()
? Me![货号 ].SetFocus
? DoCmd.FindRecord Me![Text19],,True,,True
? If Me![货号 ] <> Me![Text19] Then
? If MsgBox("货号输入错误! ",vbOKCancel,"错
误! ") = vbOK Then
? Me![Text19].SetFocus
? Else
? Me![Text19].SetFocus
? End If
? Else
? Me![Text21] = Me![货名 ]
? Me![text58] = Me![规格 ]
? Me![Text25] = Me![销售单价 ]
? Me![Text27] = 0
? Me.Refresh
? Me![Text27].SetFocus
? End If
? End Sub
3.“现金收讫”命令按钮单击事件处理
? 在“销售数据录入”窗体设计视图中,选定
“现金收讫”命令按钮,假定该命令按钮控件
“名称”属性值为,Command35”。调出属性
对话框,选定“事件”卡,在“更新后”事件
行右侧单击“生成器”按钮“”。在随即出现
的“选择生成器”对话框中,选中“代码生成
器”选项,然后单击“确定”按钮“”,进入
VBE编程环境。
? 然后,在 VBE代码窗口中输入如下程序代码,
编写完成后关闭 VBE,返回窗体设计视图。
? Private Sub Command35_Click()
? Me![Text52] = 0
? Me![Text54] = 0#
? Me.Refresh
? End Sub
4.“退出”命令按钮单击事件处理
? 在“销售数据录入”窗体设计视图中,选定
“退出”命令按钮,假定该命令按钮控件“名
称”属性值为,Command47”。调出属性对话
框,选定“事件”卡,在“更新后”事件行右
侧单击“生成器”按钮“”,即可直接进入
VBE编程环境。这是由于在第 5章创建该命令
按钮控件时,我们在 Access 2003向导的引领下
完成了这个命令按钮功能设定:关闭本窗体。
? 然后,在 VBE代码窗口中可以看到如下程序代
码,无须加以改动即可关闭 VBE,返回窗体设
计视图。
? Private Sub Command47_Click()
? On Error GoTo Err_Command47_Click
? DoCmd.Close
? Exit_Command47_Click:
? Exit Sub
? Err_Command47_Click:
? MsgBox Err.Description
? Resume Exit_Command47_Click
? End Sub
5.标签为“销售数量”的文本框失去焦点事件处

? 在“销售数据录入”窗体设计视图中,选定标
签为“销售数量”的文本框,假定该文本框控
件“名称”属性值为,Text27”。调出属性对话
框,选定“事件”卡,在“失去焦点”事件行
右侧单击“生成器”按钮“”。在随即出现的
“选择生成器”对话框中,选中“代码生成器”
选项,然后单击“确定”按钮“”,进入 VBE
编程环境,如图 6-3所示。
? 然后,应该在 VBE代码窗口中输入如下程序代
码,编写完成后关闭 VBE,返回窗体设计视图。
? Private Sub Text27_LostFocus()
? If Me![Text27] <> 0 Then
? Me![销售数据记录查询子窗体 ].SetFocus
? DoCmd.GoToRecord,,acNewRec
? Me![销售数据记录查询子窗体 ]![货号 ] = Me![Text19]
? Me![销售数据记录查询子窗体 ]![货名 ] = Me![Text21]
? Me![销售数据记录查询子窗体 ]![规格 ] = Me![text58]
? Me![销售数据记录查询子窗体 ]![计量单位 ] = Me![计量单位 ]
? Me![销售数据记录查询子窗体 ]![销售单价 ] = Me![销售单价 ]
? Me![销售数据记录查询子窗体 ]![销售数量 ] = Me![Text27]
? Me![销售数据记录查询子窗体 ]![销售日期 ] = Me![Text29]
? Me![销售数据记录查询子窗体 ]![销售人员 ] = Me![Combo45]
? Me![柜存数量 ] = Me![柜存数量 ] - Me![Text27]
? Me![Text52] = Me![Text52] + Me![Text27]
? Me![Text54] = Me![Text54] + Me![Text27] * Me![销售单价 ]
? End If
? End Sub