我已经在Excel中编写了一个VBA代码,用于尝试遍历包含作者姓名和标题的数据行,并放置" First"在第一作者的行和"最后"在最后一位作者的同一行中。
由于每篇文章的作者数量各不相同,我认为最简单的方法是使用Step转到下一个作者块,但步骤值为" y"对增加价值没有任何影响" r" (行号)。
代码:
Sub AuthFirstPlacer()
Dim r, cyclenum As Long
Dim y As Variant 'did not work a Long either
For r = 2 To 41 Step y
cyclenum = Cells(r, 4).Value
Cells(r, 6).Value = "First"
y = r + cyclenum - 1 'this meant to move to next block of authors
Cells(y, 6).Value = "Last"
Next r
...
End Sub
程序运行正常,但它根本没有步骤。它从r = 2到r = 3。 实际数据中的Y为22。
答案 0 :(得分:2)
恕我直言,你不能在程序流进入循环后改变for循环的步长。试试这个:
Sub AuthFirstPlacer()
Dim r as Long
Dim cyclenum As Long
Dim endrow As Long
r = 2
Do While r <= 41
cyclenum = Cells(r, 4).Value
Cells(r, 6).Value = "First"
endrow = r + cyclenum - 1 ' move to last line in this block
Cells(endrow, 6).Value = "Last"
r = endrow + 1
End Loop
End Sub
答案 1 :(得分:0)
在VBA For...Next Statement中,步骤不是动态增量,可以动态调整。您的 y 变量永远不会被赋予超出实例化的值,因为它被声明为零并且这是步骤。只有在它收到一个值之后才会这样做。
如果您想跳过多个记录,请使用Continue For
。
Sub AuthFirstPlacer()
Dim r as long, cyclenum As Long
For r = 2 To 41 Step 1
if r <= cyclenum then continue for
cyclenum = Cells(r, 4).Value + r - 1
Cells(r, 6).Value = "First"
Cells(cyclenum, 6).Value = "Last"
Next r
end sub
这可能不完全正确,因为我没有要测试的样本数据,但方法是合理的。您可能需要调整 cyclenum 获取新值的位置。如果您遇到困难,请发布一些预期结果的样本数据。