设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

123下一页
返回列表 发新帖
查看: 7700|回复: 26

Excel和AccessPK第二期:Access自定义单号

[复制链接]

点击这里给我发消息

发表于 2016-3-19 16:11:48 | 显示全部楼层 |阅读模式
EXCEL和ACCESS PK

第二期


Access向Excel宣战:

上一期是Excel的优势功能,Access略逊一筹,这期出个Access的题,让Excel来模仿一下

功能要求:

1. 金额自动计算:金额=单价*数量
2. 单号自动生成(且不允许用户修改,锁定)
    单号不允许重复
    单号为 字头+日期+序号   序号生成规则:每天从001开始复位,同字头 同日期的按顺序生成

功能示意 请看图片和动画




操作动画 (动画请点击一下观看,否则画面有点小)




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2016-3-19 16:16:50 | 显示全部楼层
这些EXCEL和ACCESS都很容易做呀,问题好像简单了些。

点击这里给我发消息

 楼主| 发表于 2016-3-19 16:24:50 | 显示全部楼层
lwwvb 发表于 2016-3-19 16:16
这些EXCEL和ACCESS都很容易做呀,问题好像简单了些。

Access容易做
Excel应该不太容易吧?
你是Access元老,先站在Access这边哦,先别把Excel答案放出来哦:)
星期一如果没人接招,你再放不迟

点击这里给我发消息

 楼主| 发表于 2016-3-19 16:25:58 | 显示全部楼层
lwwvb 发表于 2016-3-19 16:16
这些EXCEL和ACCESS都很容易做呀,问题好像简单了些。

lwwvb, 这题你尝试下:
http://www.office-cn.net/thread-121531-1-1.html

我没想到好办法
发表于 2016-3-19 16:34:10 | 显示全部楼层
好,我看看
回复

使用道具 举报

点击这里给我发消息

发表于 2016-3-19 16:56:34 | 显示全部楼层
这个问题用Excel来解决确实有点累……
按下面这个表格结构,金额还是很好办的,公式是:
  1. =IF(OR(A2="",B2=""),"",D2*E2)
复制代码



不过单号的公式就有点长:
  1. =IF(OR(A2="",B2=""),"",A2&TEXT(B2,"emmdd")&TEXT(COUNTIF(C$1:C1,"?"&TEXT(B2,"emmdd")&"???")+1,"000"))
复制代码


最要命的就是不让用户自己修改,那就得事先把这个公式从第2行下拉到第1048576行,然后再把工作表保护:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

点击这里给我发消息

 楼主| 发表于 2016-3-19 17:02:07 | 显示全部楼层
强!挺快的嘛。
不过有一点不对,可能我没说明清楚
A20160319001 与 B20160319001 是不同的


A20160319001
A20160319002
但到 B开头时
B20160319 也要从001开始 而不是 003开始

点击这里给我发消息

发表于 2016-3-19 17:10:05 | 显示全部楼层
tmtony 发表于 2016-3-19 17:02
强!挺快的嘛。
不过有一点不对,可能我没说明清楚
A20160319001 与 B20160319001 是不同的

这个简单,公式改一下就好了
  1. =IF(OR(A2="",B2=""),"",A2&TEXT(B2,"emmdd")&TEXT(COUNTIF(C$1:C1,A2&TEXT(B2,"emmdd")&"???")+1,"000"))
复制代码

点击这里给我发消息

发表于 2016-3-19 17:10:57 | 显示全部楼层
这个问题,Access的处理步骤是什么呢?也不公布一下

点击这里给我发消息

 楼主| 发表于 2016-3-19 17:28:41 | 显示全部楼层
Access 是用VBA 实现的,当然也可不用代码,考虑用Iif函数  ,有心的Access网友可去试一下
不过我是VBA控,没有办法

1. 代码是在窗体中先做2个自定函数

'取单号函数
Private Function GetBillNo() As String
  Dim strArea As String
  Dim strDate As String
  Dim strNo As String
  Dim strSeqNo As String
  strArea = Nz(区域) '字头
  strDate = Format(Nz(日期), "YYYYMMDD")
  strSeqNo = Format(Val(Right(Nz(DMax("单号", "销售表", "单号 like '" & strArea & strDate & "*'"), 0), 3)) + 1, "000")
  strNo = strArea & strDate & strSeqNo
  单号 = strNo
End Function

'取金额函数
Private Function GetAmt() As String
  金额 = Nz(数量) * Nz(单价)  
End Function



2. 然后在窗体的属性中设置一下

   
   注意是用shift 同时选择2个控件,可批量设置属性
   金额也类似

   单号禁用在Access里很简单,就是选择这个控件,属性窗体 数据选卡 里 “可用” 设置为 否

源文件在这里



希望大家跟贴上传更好的方法

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-3-29 18:35 , Processed in 0.139460 second(s), 39 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表