我的目标:让中国的大学生走出校门的那一刻就已经具备这些office技能,让职场人士能高效使用office为其服务。支持我,也为自己加油!
前几天刚写过一篇文章:
《听说这是制作工资单最快的办法》
里面代码是这么写的:
Sub 制作工资条()Dim i%, r$, r1$, n%, r2$, r3$For i = 3 To [a1].End(xlDown).Row r = r & i & ":" & i & "," r1 = Left(r, Len(r) - 1)NextRange(r1).InsertRange("a1", Cells(Rows.Count, "f").End(xlUp)).SpecialCells(xlCellTypeBlanks) = Range("a1:f1").ValueFor n = 3 To [a1].End(xlDown).Row Step 2 r2 = r2 & n & ":" & n & "," r3 = Left(r2, Len(r2) - 1)NextRange(r3).InsertWith Range("a1", Cells(Rows.Count, "f").End(xlUp)).SpecialCells(xlCellTypeBlanks) .RowHeight = 13 .Borders(xlEdgeLeft).LineStyle = xlNone .Borders(xlEdgeRight).LineStyle = xlNone .Borders(xlInsideVertical).LineStyle = xlNoneEnd WithEnd Sub
代码里包括了隔行插入、批量填充空白单元格、设置单元格格式三个部分。
前几天,有位同学拿个这个代码练习的时候发现一个问题,当工资表中的数据条数比较多时,代码运行就会弹出错误提示,如下:
这是为什么呢?
上面代码中的隔行插入,我是模拟在工作表中按住Ctrl然后分别选中每行,然后再插入,这样如果数据行数多时就会出现一种情况:
Range("1:1","2:2","3:3",……) 中间的红色部分可能会超过255个字符,超过255个字符后就会报错,因为变量名的长度是不允许超过255个字符的。 遇到这种情况该怎么解决呢? 我们可以在循环时直接插入,比如:Sub 制作工资单2()Dim i%, r%, rng As Range, rng1 As Ranger = Cells(Rows.Count, 1).End(3).RowFor i = 3 To (r - 1) * 2 Step 2 Range(i & ":" & i).InsertNextr = Cells(Rows.Count, 1).End(3).RowSet rng = Range("a2", Cells(r, "h")).SpecialCells(xlCellTypeBlanks)[a1:h1].Copy rngEnd Sub
如上代码中,每插入一行,原有行数就要下移一行,所以循环时步长应该为2。
也可以从最后往前面循环插入:
Sub 制作工资单1()Dim i%, r%, rng As Ranger = Cells(Rows.Count, 1).End(3).RowSet rng = Range("3:3")For i = r To 3 Step -1 Range(i & ":" & i).InsertNextr = Cells(Rows.Count, 1).End(3).RowSet rng = Range("a2", Cells(r, "h")).SpecialCells(xlCellTypeBlanks)[a1:h1].Copy rngEnd Sub
效果如下:
此种方法不需要把行数用字符串完整表达出来后再插入:
大家仔细对比三段代码,细品其中的区别,一定会有所收获!
本节的分享就到这里,鹏哥祝大家每天都有进步。
想学习更多,请在电脑端打开网址: www.mihong.top鼓励一下,赞完再走