刚工作的时候,因为经常要把订单整理出具体要求,然后下发到车间,所以diy了一个订单系统,利用了一些excel自动生成数据的函数。比如用“today()”来实现下单的日期,用“sum()”来统计总体的数量。
这个简陋的管理系统用于打印是没有大问题。但是涉及到数据的保存就犯了难,类似“today()”这样的函数的取值是每天都会变的,直接复制粘贴到另一张表吧,还得进行一次选择性粘贴,手续较为繁琐。当时没有其他的好办法,因为着急要用,最后直接在打印的时候把订单另存为了一张图片,对图片名称添加关键字以便搜索。-_-!!!
希望完成的是类似这样的效果,上方生成数据,在下方或在另一张表中保存数据以供检索;
首先是根据记录条数自动修改订单号,这里用了“counta()”函数:
="订单" & "-" & COUNTA(A11:A65533)+1
其次是文件格式,目标想要自定义一个用户界面,放两个按钮,一个用来记录,另一个用来删除数据。在2007版本中直接保存会出现安全提示,默认的文件格式是不支持这样的操作的,需要将文件另存为xlsm的后缀,这个最后的m,大概就是marco的意思吧。
自定义了用户界面后,点击运行时按钮生效,但是无法再对表格本身进行任何操作,解决方法是在文档的open事件上添加上述语句,保存后重新启动文档,如果有安全提示则先允许,就可以在编辑文档的时候看到自定义界面了。
Private Sub CommandButton1_Click()
i = 11
While (Cells(i, 1) <> ""):
i = i + 1
Wend
Cells(i, 1) = Cells(1, 1)
Cells(i, 2) = Cells(2, 1)
Cells(i, 3) = Cells(2, 2)
Cells(i, 4) = Cells(3, 1)
Cells(i, 5) = Cells(3, 2)
Cells(i, 5).NumberFormatLocal = "yyyy/m/d h:m"
Cells(i, 6) = Cells(4, 1)
Cells(i, 7) = Cells(4, 2)
Cells(i, 7).NumberFormatLocal = "yyyy/m/d"
End Sub
Private Sub CommandButton2_Click()
i = 11
While (Cells(i, 1) <> ""):
i = i + 1
Wend
If i <> 11 Then
Cells(i - 1, 1) = ""
Cells(i - 1, 2) = ""
Cells(i - 1, 3) = ""
Cells(i - 1, 4) = ""
Cells(i - 1, 5) = ""
Cells(i - 1, 6) = ""
Cells(i - 1, 7) = ""
Else
MsgBox "历史记录已经空荡荡了哦!"
End If
End Sub
按钮的动作反而比较简单,将上部的数据源与下方的列表一一对应就可以了,值得一提的是日期格式的数据,需要利用vba的函数进行以下转义。“today()”函数可以通过如下的方式转义:
对象.NumberFormatLocal = "yyyy/m/d"
而now对象除了日期之外还附带时间信息,转义时可以写成这样:
对象.NumberFormatLocal = "yyyy/m/d h:m:s"
“h:m:s”分别对应着时,分,秒,如果不需要显示秒数也可以写成“h:m”这样的形式。这样就只会显示小时和分钟的数据了。
测试文件下载
顺便提供实例文件供有兴趣的亲参考: