【问题标题】:Incrementing 5 digit number, including leading zeros递增 5 位数字,包括前导零
【发布时间】:2020-07-05 21:32:00
【问题描述】:

我需要在 Access 2016 中生成对帐单编号。这些编号需要 5 位长,如果对帐单编号少于 5 位,我需要用前导零填充编号。

作为起点,第一个语句号不会被填充。所以如果最后一条语句号是 96,那么下一条语句号需要是 00097。

是否有可能(我假设在 VBA 中)同时满足这两种情况,即数字长度为 5 位或更少。

我正在考虑首先从最后一个语句编号(如果存在)中去除前导零,将剩余的数字加一,然后添加前导零以使数字的长度为 5,但我不确定最有效的方法。

【问题讨论】:

    标签: vba ms-access


    【解决方案1】:

    如果它有一个前导零,它将不是一个数字,而是一个字符串。但是,只要没有太大区别,这样的东西就可以了:

    Sub TestMe()
        Dim cnt         As Long
        Dim myString    As String
        For cnt = 98 To 120
            myString = Format(cnt, "00000")
            Debug.Print myString
        Next cnt
    End Sub
    

    这是您在即时窗口中看到的内容:

    00098
    00099
    00100
    00101
    

    【讨论】:

    • 我设置了一个字符串变量 NextStateStr 和一个 Long 变量 LastStateNum。我可以在即时窗口中看到 00005(正确的值),但是当我使用 NextStateStr 时,它实际上是 5??
    • @user1936588 - “如果它有一个前导零,它就不是一个数字,而是一个字符串。”这意味着你应该将值声明为String,而不是Long
    • @user1936588 - LastStateNum 是什么,它是如何变成 4 的?
    • 对不起,我的错误。在所有情况下,最后一个语句编号都将保存为一个编号。在我的示例中,值为 4,因此我的下一个值(需要是字符串)是 00005。然后我将值 5 保存到数据库中。
    • 确实如此。抱歉 - 我也错误地将 NextStateStr 设置为 Long。感谢您的帮助!
    【解决方案2】:

    是的,只需先转换为数字:

    NextValue = Format(Val(CurrentValue) + 1, "00000")
    

    【讨论】:

    • 与 Vityata 对您的评论相同
    【解决方案3】:

    你也可以使用:

    NextStateStr = Right("00000" & LastStateNum + 1, 5)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-11
      • 2010-09-23
      • 2018-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多