智能进销存软件:革新现代库存管理
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
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~