最近生产和我说,配舱系统实在是太烦了,
他和我说了一下他的工作方式,
首先是打开系统,
第二步打开筛选器,
第三步抄下今天所有未确认的订单到自己的本子上,
然后跑到车间去一票一票确认,
生产表示浪费时间的主要有两点:
①本来由总经办来截图给生产,生产来回复是否能够按时完成,然后王陈去系统里一票一票确认,这也就意味着,原本只需要动动嘴巴,做做决策,现在既要做决策,又要做文员的工作(一票一票的点);
②订单明细太长,生产只需要订单号就可以了,有时候为了找一票订单需要花费很长时间,例如生产二部一票订单有12个柜的,这个时候就比较麻烦;
解决:
①第一个问题,其实爱莫能助的,为什么会有以前的这种模式——把所有的文员工作放到总经办,那是因为暂时没有办法去统一协调每个部门的工作,我们不可能让
②第二个问题其实是可以解决的,就是要把窗体里筛选出来的订单,压缩一下,只取出里面的订单号,确认结果和最终的延期时间么。这个很简单的。
接下来的工作
一、思路——所谓思路就是用最短的语言,用人能听懂的话:
首先要从窗体中取出数据源,然后用一定的技术(这里你要我怎么说呢?既然要说人话,那我说DAO和EXCEL VBA你又要懵逼了)把数据源压缩成订单号列表,放到Access里面去,最后把数据放到Excel里面去。
那么
①数据源取出来是什么东西?
答:有可能是一个Select字符串,
例如:“SELECT A,B,C FROM TABLEX”
也有可能是一个表格或者查询的名称,
例如:“采购查询”
那么,这两种情况?这个怎么处理?看代码吧!
②数据源拿到了,接下来要用到那些知识?
第一个是VBA代码操作查询的知识(包括怎样创建、怎样删除、怎样检查Application里是否有同名查询);
第二个是DAO或者是ADO的数据记录集的知识;
第三个是Excel VBA的知识,特别是Excel的对象。
Private Function createQry()
Dim strSQLQr As String
Dim db As DAO.Database
Dim qr As DAO.QueryDef
strSQLQr = Form_frm采购订单查询.Form.RecordSource
If strSQLQr = "采购订单查询" Then
strSQLQr = "select * from " & strSQLQr
End If
Set db = CurrentDb
'-----检查是否存在同名查询
Dim I As Integer
db.QueryDefs.Refresh
For I = 0 To db.QueryDefs.Count - 1
If "Qry_PeicangList" = db.QueryDefs(I).Name Then
'如果查询名:Query_temp存在
db.QueryDefs.Delete "Qry_PeicangList"
Exit For
End If
Next I
Set qr = db.CreateQueryDef("Qry_PeicangList", strSQLQr)
db.Close: Set db = Nothing
Application.RefreshDatabaseWindow
MsgBox "创建成功!"
End Function
补充:
但是在实际过程中我发现一个BUG,打开记录集的时候,如果FROM 后面的表格是查询,那么就算查询里面有数据,可能记录集也是空的,尤其是查询语句中包含Like语句时。
所以我在想,如果把数据放到一个中间表中,那么记录集是肯定不会空的,之前也经常看见朱总这么操作,只要最后把表格删掉就好了。
表格定义的文章看这里:“ CreateField方法简记”
'-----------检查是否存在同名表格,如果存在就删除--------------
For i = 0 To DB.TableDefs.Count - 1
If "tblPaigui" = CurrentDb.TableDefs(i).Name Then
'如果查询名:Query_temp存在
CurrentDb.TableDefs.Delete "tblPaigui"
Exit For
End If
Next i
'-----------创建表格--------------
Set tb = DB.CreateTableDef("tblPaigui")
With tb
.Fields.Append .CreateField("采购订单号", dbText)
.Fields.Append .CreateField("采购日期", dbDate)
End With
'将表添加到对象集合中
DB.TableDefs.Append tb
Application.RefreshDatabaseWindow
Set tb = Nothing
DB.Close: Set DB = Nothing
最后用我getTblExcel函数,将数据输出到Excel表格中。
2017年6月7日上午10点半
俞智峰