gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:41:01 25 4
gpt4 key购买 nike

这是我在 stack Overflow 上发表的第一篇文章,也是我的第一个关于编程的在线问题。

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

我在开发编号代码时遇到问题。

代码的格式为:YY-######。我目前正在使用:

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

这样就可以将年份和“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

它循环遍历每个行,直到找到空行,然后使用年份和指定行减一将数字输入到该单元格中。

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

14 - 001111

14 - 001112

14 - 001113

15 - 000001

15 - 000002

但是,问题是该数字是使用行生成的,因此它不会以新的一年重新开始。我知道我需要另一个变量,如果年份相同,则在前一个数字上加 1,或者仅循环同一年的行,直到找到新行,这就是为工作订单编号输入的数字,但是要输入数字的空行应该以与之前相同的方式通过 iRow 循环来确定。我不知道如何确定上一个条目的年份...您能否以某种方式将值分成“YY”和“######”两部分?并运行 if 语句,如果“YY”与当前年份相同,则“######”加 1?

感谢您的建议!

更新:我已经创建了一个可以工作的代码块。它基于 @user1759942 的响应。但是,我确实引用了对暗淡变量的其他响应,并正确使用了“Right”函数。这是更新后的代码:

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 as string 来保存年份,我会使用一个单独的变量来放置数字:dim lCodeNum as long 并在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

关于vba - 对我的单元格进行编号并根据年份进行重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22379924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com