excel – 根据年份对我的单元格进行编号并重置

这是我的第一篇关于堆栈溢出的帖子和我关于编程的第一个在线问题.

我正在开发一个程序来记录制造工厂的项目(工作订单)请求.由于从Windows XP切换,当前系统正在被删除.

我在编写编号代码时遇到问题.

代码的格式是:
YY – ######.我目前正在使用:

.Cells(iRow, 1).Value = Format(Date, "yy") & " - " & Format(iRow - 1, "000000")

这样就可以输入Year和“iRow” – 1到第一列. iRow使用以下方法确定:

iRow = 2 'starting index for next empty WONum cell
With WORecordSheet
    'Find the next empty WONum cell
    Do While .Cells(iRow, 1).Value <> ""
        .Cells(iRow, 1).Activate
        iRow = iRow + 1
    Loop
End With

它循环遍历每个直到找到一个空行,然后使用年份和指定的行减1输入该数字.

我遇到的问题是今年.当新的一年到来时,它需要切换回第一个工单….例如:

14 – 001111

14 – 001112

14 – 001113

15 – 000001

15 – 000002

但是,问题是该数字是使用该行进行的,因此它不会在新的一年中重新启动.我知道我需要另一个变量,如果年份相同,则将前一个数字加1,或者只循环同一年的行,直到找到新行,这是工作订单号输入的数字,但输入数字的空行应该用与之前相同的方式决定,使用iRow循环.
我不知道如何确定前一个条目的年份…你能不能把这个值分成“YY”和“######”两部分?并运行if语句,如果“YY”与当前年份相同,那么它将“######”添加1?

谢谢你的任何建议!

更新:我创建了一个有效的代码块.它基于@ user1759942的响应.但是,我确实引用了对昏暗变量的其他响应,并正确使用了“右”功能.这是更新的代码:

Dim iRow As Long
Dim yr As Long
Dim lCodeNum As Long

WORecordSheet.Activate
iRow = 2 'starting index for next empty WONum cell
lCodeNum = 1 'starting index for last 6 digits of wonum
With WORecordSheet
'Find the next empty WONum cell
    Do While .Cells(iRow, 1).Value <> ""
        .Cells(iRow, 1).Activate
        iRow = iRow + 1
    Loop

    yr = Left(.Cells(iRow - 1, 1).Value, 2)

    If yr = Format(Date, "yy") Then
        lCodeNum = Right(.Cells(iRow - 1, 1).Value, 6) + 1
    Else
        lCodeNum = 1
    End If
End With

后来:

    .Cells(iRow, 1).Value = Format(Date, "yy") & " - " & Format(lCodeNum, "000000")

最佳答案 你可以完全按照你的想法去做.将YY与其他人分开并检查.

有一个变量 – dim yr作为字符串来保存年份,我会使用一个单独的变量来设置数字:dim lCodeNum尽可能长,而在while循环中也设置这些变量

dim yr as string
iRow = 2 'starting index for next empty WONum cell
lCodeNum = 1
With WORecordSheet
    'Find the next empty WONum cell
    yr = left(.cells(iRow,1).value, 2) 'gets the first 2 characters in the cell
    Do While .Cells(iRow, 1).Value <> ""
        .Cells(iRow, 1).Activate
        iRow = iRow + 1
        if not left(.cells(iRow, 1).value, 2) = yr then
            lCodeNum = 1
        else
            lCodeNum = lCodeNum + 1
        end if
        yr = left(.cells(iRow,1).value, 2)

    Loop
End With

然后,当您将值分配给空单元格时,您可以执行以下操作:

    .Cells(iRow, 1).Value = Format(Date, "yy") & " - " & Format(lCodeNum, "000000")

所以上面的方法,你使用irow循环遍历每一行,并引用单元格,但使用lCodeNum作为数字,因此每次遇到新年时它都会重置为1.

你可以使用irow而不是lcodenum,但是如果遇到新的一年你只能输1,那么数字就会从他们离开的地方开始,所以你最终会喜欢

14 - 000144
14 - 000145
15 - 000001
15 - 000147
点赞