头条文章——巧用表单组合框进行商品销售出库单设计

各位粉丝朋友,大家好,你们办公工作中利用过excel设计过自己的独特的智能产品出入库单吗?说是智能,无非就是利用excel的高级选择功能进行数据在出入库单中的智能呈现方式。

为此,我给各位以商品出库单设计为例分享一下我的智能商品出库单的过程吧!废话不多说了,我们说干就干吧!

一、准备需要的原始数据

大家可以根据自己的实际数据进行准备,我这里以我的数据为例。如下部分截图所示

图1 销售商品明细数据截图

二、出库单的详细界面设计

(一)设计主体出库单界面

将所有的单元格填充为白色,并且规划表格、文字的布局设计。如下图所示

图2 出库单主体界面设计

(二)在上面的主体界面上添加三个VBA表单控件(非ActiveX控件哦!)

在适当位置插入一个表单按钮、一个表单组合框、一个表单标签,名称分别为“清除按钮”、“表单组合框”、“选择订单号提示”。同时,将表单标签控件置于表单组合框中央内部。整体布局如下图所示

图3 添加三个表单控件及其布局

三、出库单智能填充数据功能实现代码

(一)ThisWorkbook代码:

Private Sub Workbook_Open() '工作簿打开后,初始化表单组合框列表项内容等工作

Dim col As New Collection '定义集合变量col

On Error Resume Next '如果出现错误,则执行下一语句

Set sel_orderID_prompt = Sheets("出库单").Shapes("选择订单号提示") '为订单号提示标签图形变量指派具体的标签图形

Set lb = Sheets("出库单").Shapes("表单组合框") '为表单组合框lb对象变量指派具体的表单组合框图形Shapes("ddlb1")

lb.ControlFormat.RemoveAllItems '删除原有列表项

hs = Sheets("销售明细").Cells(1, 1).End(xlDown).Row '求有效行数

For k = 2 To hs '按行循环

x = Sheets("销售明细").Cells(k, 1) '取一个订单号

col.Add x, CStr(x) '添加集合元素,排除重复值

If Err.Number = 0 Then '数据不重复

lb.ControlFormat.AddItem x '添加下拉列表项

End If

Err.Clear '清除错误状态

Next

On Error GoTo 0 '恢复错误处理

Call cls_datas '调用自定义过程cls_datas清除"出库单"工作表相应数据

End Sub

(二)模块1代码:

Public rg As Range, lb As Shape '定义公有全局范围对象变量rg、图形变量表单组合框lb

Public sel_orderID_prompt As Shape '定义公有全局选择订单号提示标签图形变量sel_orderID_prompt

Sub tx() '往出库单指定的单元格中填写数据

sel_orderID_prompt.Visible = msoFalse '一旦选择订单号后立即将选择订单号提示标签图形隐藏起来

n = lb.ControlFormat.Value '求出下拉列表项的序号

ddh = lb.ControlFormat.List(n) '取出订单号

Cells(2, 2) = ddh '填写订单号

Range("B5:E14").ClearContents '清除目标区数据

r = 5 '目标起始行

Set sh = Sheets("销售明细") '将对象用变量表示

hs = sh.Cells(1, 1).End(xlDown).Row '求有效行数

For k = 2 To hs '按行循环

If sh.Cells(k, 1) = ddh Then '找到订单号

Cells(3, 2) = sh.Cells(k, 5) '填写收货单位

Cells(r, 2) = sh.Cells(k, 2) '填写货物名称

Cells(r, 3) = sh.Cells(k, 3) '填写型号

Cells(r, 4) = sh.Cells(k, 4) '填写数量

r = r + 1 '调整目标行

End If

Next

End Sub

Sub Erse_Datas_Proc() '为表单按钮特别指定定义的清除数据过程

yn = MsgBox("确定要清除出库单中的数据吗?", vbQuestion + vbOKCancel, "提示")

If yn = vbOK Then

If rg = "" Then '若范围rg为空,即无数据,则作如下甄别处理

MsgBox "无数据,无需清除,操作被禁止!", vbInformation, "提示"

Else

Call cls_datas '调用自定义过程cls_datas清除"出库单"工作表相应数据

MsgBox "出库单数据清除成功!", vbInformation, "提示"

End If

Else

MsgBox "您取消了数据清除操作!", vbInformation, "提示"

End If

End Sub

Sub cls_datas() '清除"出库单"工作表相应数据

lb.ControlFormat.Value = 0 '表单组合框lb

sel_orderID_prompt.Visible = msoTrue '将选择订单号提示标签图形显示出来

Set rg = Sheets("出库单").Range("B2,B3:E3,B5:E14") '为rg指派具体的单元格范围区域

rg.ClearContents '每次打开启用工作簿后清除"出库单"工作表相应数据为空白的出库单

End Sub

接着,回到excel前端界面,为表单按钮控件指定运行宏“tx”、表单组合框控件指定运行宏“Erse_Datas_Proc”即可。

保存本工作簿格式为xlsm并关闭。

四、智能出库单智能填充数据测试

重新打开刚才保存过的xlsm工作簿文件,可以做如下操作测试:

(一)选择表单组合框选订单号。如下图所示

图4 选择商品订单号

(二)选择订单号后自动填充数据结果。如下图所示

图5 选订单号后自动填充数据

(三)准备开始清除自动填充的数据。如下图所示

图6 准备开始清除数据

(四)清除自动填充的数据结果。如下图所示

图7 清除数据的结果

(五)无数据的情况下准备进行清除数据。如下图所示

图8 无数据情况下准备清除数据

(六)无数据的情况下进行清除数据结果。如下图所示

图9 无数据情况下清除数据结果

五、实施设计的关键技术

(一)利用集合机制实现无重复的订单号动态追加到表单组合框去。核心代码截图如下所示

图10 利用集合机制追加表单组合框列表项

(二)利用循环查找订单号序号机制订单号动态填充出库单数据。核心代码截图如下所示

图11 填充出库单数据关键代码

(三)利用对话框确定取消机制交互式清除出库单数据。关键代码如下截图所示

图12 用对话框交互式清除出库单数据

好了,以上就是我为大家分享我自己做的智能商品销售出库单,希望大家喜欢,也但愿能给大家的高级办公带来帮助!

最后,还是非常感谢各位粉丝的关注(头条号:跟我学office高级办公)、推广和点评哦!

举报
评论 0