latex表格内项目编号
总览人们经常问如何按年份重置索引。 也就是说,例如,他们希望为其商品指定唯一的索引,但是编号顺序应该每年重新设置。 这只是在组内编号的一个示例。 在这种情况下,分组因子是年份。 在其他情况下,可能相关的产品组可能具有用作产品本身索引一部分的代码(缩写)。
除此之外,还需要在组ID后面附加序号,有时需要在诸如“ _”或“-”之类的分隔符之后。
表格布局(例如) [ tblProduct ] ID Text(10) 'Laid out as "{Year}_nnnnn" where nnnnn is a sequential number within the year
方法
确定下一个索引值应为的方法是找到当前的最大值,将其拆分为各个组成部分,将其添加到数字序列值中,然后重新制定新值。 我们可以轻松地做到这一点,但是我们需要获取代码来可靠地为我们做到这一点。
假设上面概述的表并不复杂,那么下面的函数过程将返回表中的下一个值。
Public Function GetNextID() As String
Dim lngSeq As Long
Dim strWork As String
strWork = Replace("([ID] Like '%Y_*')", "%Y", Format(Date(), "yyyy")
lngSeq = Val(Right(Nz(DMax(Expr:="[ID]", _
, Domain:="[tblProduct]" _
, Criteria:=strWork), String("0", 10)), 5)) + 1
strWork = Split(strWork, "'")(1)
GetNextID = Replace(strWork, "*", Format(lngSeq, "00000"))
End Function
说明
- 第5行准备了一个字符串,我们将首先使用它作为过滤器,然后再使用它来设置返回值。
- 第6行到第8行包含一条连续的VBA行。
- DMax()查找该年份已使用的ID的最后一个值(如果有)。
- Nz()处理什么都找不到(DMax()中的Null值),并将其替换为十个零的字符串。
- Right()返回最右边的五个字符-IE。 ID的序列号部分。
- Val()将结果从字符串转换回数字格式。
请注意,结果值最后还添加了1。
- 第9行从strWork中提取了我们先前使用的实际模式。
- 第10行通过用新的序列号替换我们之前匹配的模式中的“ *”来设置函数的返回值。
本示例使用
Date()
函数,格式为年份,以说明该概念。
如前所述,您可以使用任何您想要的东西。
例如。
如果您有一个FiscalYear()
函数,该函数返回了会计年度的数值,则代码如下:
Public Function GetNextID() As String
Dim lngSeq As Long
Dim strWork As String
strWork = Replace("([ID] Like '%Y_*')" _
, "%Y", Format(FiscalYear(Date()), "0000")
lngSeq = Val(Right(Nz(DMax(Expr:="[ID]", _
, Domain:="[tblProduct]" _
, Criteria:=strWork), String("0", 10)), 5)) + 1
strWork = Split(strWork, "'")(1)
GetNextID = Replace(strWork, "*", Format(lngSeq, "00000"))
End Function
请注意,这里唯一的区别是在第5行中,其中Date()
更改为FiscalYear(Date())
,格式字符串已从"yyyy"
更改为"0000"
因为我们现在正在处理一个简单的数值,而不是比约会。
结果仍然是显示为四位数字符串的数字。
另外,由于行长,我将其分为多行,但这丝毫不影响逻辑。
翻译自: https://bytes.com/topic/access/insights/965133-item-numbering-within-group
latex表格内项目编号