ad

跟着一起学《Excel VBA跟卢子一起学 早做完 不加班 基础入门版》_代码4-7 工资条生成

网友投稿 116 2023-11-07

【摘要】 本书摘自《Excel VBA跟卢子一起学 早做完 不加班 基础入门版》一书中第4章,第1节,韩小良著。

代码4-7 工资条生成

1|Sub Gzt_OffsetandResize()

2] Dim Ys_Rng As Range,Bti As Range,Copy_Rng As Range

3| Dim YsMrow As Long,YsMcol As Integer,Cous As Long,Cou As Long

跟着一起学《Excel VBA跟卢子一起学 早做完 不加班 基础入门版》_代码4-7 工资条生成

4|

5| On Error Resume Next '容错语句

6| Set Ys_Rng=Application.InputBox(“选择原工资条的完整单元格区域”,”工资条区域",Type:=8)

71 If Ys_Rng Is Nothing Then Exit Sub

8| With Ys_Rng

9| If.Count=1 Or.Rows.Count<3 Or.Columns.Count<6 Then Exit Sub

10| End With

11| YsMrow=Ys_Rng.Rows.Count

12| YsMcol=Ys_Rng.Columns.Count

13|

14| Set Bti=Application.InputBox(“选择原工资条的标题区域”,”工资条标题区域",Type:=8)

15| If Bti Is Nothing Then Exit Sub

16| With Bti

17| If.Address ~ Ys_Rng.Rows(1).Address Then Exit Sub

18| End With

19| Set Copy_Rng=Application.InputBox(“选择复制到的单元格位置”,”复制到的单元格",Type:=8)

20| If Copy_Rng Is Nothing Then Exit Sub

Set Copy_Rng=Copy_Rng(1)

22| Cous =0

231 Cou=2

24| Application.ScreenUpdating=False

251 Do While Cou<=YsMrow-1

26| With Copy_Rng '简化同一引用对象

27| Bti.Copy.Offset(Cous)

28| Ys_Rng.Rows(Cou).Copy.Offset(Cous+1)

29| .Offset(Cous),Resize(2,YsMcol).RowHeight=25

30| .Offset(Cous+2).Resize(,YsMcol).RowHeight=5

31

Cous =Cous+3

32|

Cou =Cou+1

331

End With

34|

Loop

351 Application.ScreenUpdating =True

36| Copy_Rng.Parent.Activate

37| MsgBox" 工资条已制作完成。"

38|End Sub

代码4-7示例过程中首先声明了3个Range 对象变量;Ys_Rng 为工资条的数据源区域; 必须包含标题,Bti 变量为选择工资条的标题区域,该区域必须与Ys_Rng 包含第1行的标题 行区域等同,Copy_Rng 则是需要复制到的指定单元格位置。

使用Application.InputBox 方法让用户选择工资区域,并通过If 条件语句判断是否选择了 区域,如果用户3个区域变量均未选择,即 If Ys_Rng Is Nothing Then Exit Sub语句判断该区域 变量为 Nothing结果为 True 时,都将退出执行过程 (Exit Sub)。

YsMrow和 YsMcol 为获取 Ys_Rng区域内的行数和列数; Cous 变量为用于 Do…Loop 循 环,起始值为0,用于获取Copy_Rng 配合Offset属性偏移的行数;Cou 同样也是用于Do 循环, 其起始值为2,即为Ys_Rng 变量中的第2行开始(相关人员的工资信息)。

无言: 该过程主要重点在于Do…Loop 循环,现对该段代码进行说明。

(1)Do While Cou<=YsMrow-1语句:当Cou 变量值小于等于Ys_Rng 中的减去标题后 的行数时则继续这行循环。

(2)With Copy_Rng语句:为简化重复引用Copy_Rng 对象的引用,即明确Offset 属性的 起始单元格位置,在 Do 循环过程,该变量永远不变。

(3)Bti.Copy.Offset(Cous) 语句:将标题内容复制到 Copy_Rng变量指定的工作表的开始 位置,因为是Offset 属性和 Cous变量, Cous的初始值为0,即第1次复制时标题是与Copy_ Rng 位置相同的。

(4)Ys_Rng.Rows(Cou).Copy .Parent.Range(.Address).Offset(Cous +1)语句,将具体的工 资明细复制到指定的工作表的指定单元格位置——Ys_Rng.Rows(Cou)指的是获取Ys_Rng 区 域中的第2行区域数据,并通过Copy 方法将其复制到Copy_Rng 单元格位置偏移1行的— Cous 原本为0,因为+1后配合Offset 属性,将在Copy_Rng的单元格位置再偏移1行执行 Copy 方法。

(5).Offset(Cous).Resize(2,YsMcol).RowHeight =25 语句,主要用于调整工资明细行的行 高,行高为25,Range.RowHeight 属性为设置行高。

(6).Offset(Cous+2).Resize(,YsMcol).RowHeight =5语句,与上一句的作用相同,设置 复制单元格位置偏移2行后的行高,设置两工资条间的空白行行高为5。

(7)循环中不断改变Cous 和 Cou 两个变量的值, Cous+3 是因为工资条的格式为一条2 行其中1行为空白行,所以+3;而Cou 为根据工资表已有的行数每次+1获取原工资区域中下 一行号。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:达人之路·《高效办公应用宝典公式·函数与VBA》_1.3 公式和函数的用途
下一篇:达人之路·《高效办公应用宝典公式·函数与VBA》_3.4 隐藏表格中的公式
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×