各位老师,我想给程序中的编号写个自定义函数,就象开发平台中的自定义编号一样,由于在我的软件中有多个这样的编号,且多次使用。函数中要用到 left 和 dmax函数,这两个参数中都要用到编号这个字段,left函数要的是编号这个字段的值,而Dmax函数用到时表中字段名称,搞不好,一直报错,请帮我看看。
自定义函数代码:
Public Function No_refresh(a As String, b As Integer, c As String, d As Integer) As String '对报告编号、指导书号和原始记录号赋值
Dim m, k As String
Dim j As String
'a:更新的字段名称
'b:更新字段去除序号部分的位数
'c:更新字段表名称
'd:更新字段序号部分的位数
m = Left(a, b)
j = DMax("[&a&]", c, a Like " & m & '*'&")
k = Format(Val(Right(j, d) + 1), "& format(0,d) &")
No_refresh = m & k
End Function
程序中使用该函数的语句:
Me.报告编号 = No_refresh(报告编号, 9, "MTB", 4)
软件窗体截图见附件。窗体截图,点击继续输入执行自定义函数
参考下面的自动编号函数的写法:
'Domain 表名/查询名
'Expr 编号字段名
'Digit 编号位数(数字顺序号部分)
'Prefixal 编号前缀,可以是任意字符
Function AutoNumberStr(Domain As String, Expr As String, Digit As Long, Optional Prefixal As String) As String
AutoNumberStr = Nz(DMax(Expr, Domain, Expr & " Like '" & Prefixal & "*'"))
AutoNumberStr = Val(Mid(AutoNumberStr, Len(Prefixal) + 1)) + 1
AutoNumberStr = Prefixal & Format(AutoNumberStr, String(Digit, "0"))
End Function
老师,您好,还是出现如下错误:
我的自定义函数代码参考您提供的代码后,修改如下(前缀也是不同的,不能通过函数变量提供,需要从既有参数中取得):
Public Function NO_Auto(Expr As String, m As Integer, domin As String, n As Integer) As String '对报告编号、指导书号和原始记录号赋一个唯一性的值
Dim Prefixal As String
'expr:更新的字段名称
'm:更新字段去除序号部分的位数
'domin:更新字段表名称
'n:更新字段序号部分的位数
Prefixal = Left(Expr, m)
NO_Auto = Nz(DMax(Expr, domin, Expr & " Like'" & Prefixal & "*'"))
NO_Auto = Val(Right(Expr, n)) + 1
NO_Auto = Prefixal & Format(NO_Auto, String(n, "0"))
End Function
继续输入点击事件中的自定义函数代码:
Me.报告编号 = NO_Auto("报告编号", 9, "MTB", 4)
对照截图
你就用我发给你的函数就行的。
关键在于你调用的有问题。你前缀部分如果不是固定的,要从哪里去取?
把这个问题搞清楚就很容易了。
哪怕前面的日期,你也可以作为前缀的一部分来看待。
比如:
‘自动编号函数
'Domain 表名/查询名
'Expr 编号字段名
'Digit 编号位数(数字顺序号部分)
'Prefixal 编号前缀,可以是任意字符
Function AutoNumberStr(Domain As String, Expr As String, Digit As Long, Optional Prefixal As String) As String
AutoNumberStr = Nz(DMax(Expr, Domain, Expr & " Like '" & Prefixal & "*'"))
AutoNumberStr = Val(Mid(AutoNumberStr, Len(Prefixal) + 1)) + 1
AutoNumberStr = Prefixal & Format(AutoNumberStr, String(Digit, "0"))
End Function
'调用代码示例:
Me.报告编号 = AutoNumberStr("表1", "报告编号", 4, Left(Me.委托编号, 7) & "MT")
老师,您好!还是不能通过,自定义函数NO_Auto中的第一个参数expr直接代入的是“报告编号”这四个汉字的字符串,而不是报告编号这个字段名。所以现在点击继续输入后,得到的值是2017042MT0001,这个编号目前已经编到0009号,0001号重复,报错了。
Public
Function NO_Auto(Expr As String, domin As String, n As Integer,
Optional prefixal As String) As String '对报告编号、指导书号和原始记录号赋一个唯一性的值
'expr:更新的字段名称
'm:更新字段去除序号部分的位数
'domin:更新字段表名称
'n:更新字段序号部分的位数
NO_Auto = Nz(DMax(Expr, domin, Expr & " Like'" & prefixal & "*'"))
NO_Auto = Val(Right(Expr, n)) + 1
NO_Auto = prefixal & Format(NO_Auto, String(n, "0"))
End Function
我是让你用我发的那个函数就行了,你那个函数你也没改对。
NO_Auto = Val(Right(Expr, n)) + 1 ‘你写成这样是对字段名进行操作了
NO_Auto = Val(Right(NO_Auto, n)) + 1 '要对取得的值进行处理才对
解决了,非常感谢红尘如烟老师!
总记录:6篇 页次:1/1 9 1 :