|
大家都知道运用vba可以让我们在excel操作中节省时间,但是vba毕竟需要编程的知识储备,也因此劝退了绝大部分Excel使用者。 其实如果通过案例,在解决实际问题中学习,往往有事半功倍的效果。 今天DADO就给大家讲解一个比较有代表的简单案例,希望能对大家有所帮助。
案例背景

图1
- 公司经常需要编制付款单(如图1)
- 每次付款单编制完之后,往往就另存为一份电子版。 这不能满足在同一个地方查找付款单记录的要求。
- 所以需要编制一个单独的付款记录表,把每次编制完的付款单信息登记到这个汇总记录表中。这样就可以一目了然付款单出具的情况。(如图2)

图2
需求
用vba编写一个宏,并将这个宏关联到“付款单”表的一个“保存”按钮上。 实现在一键将编制完成的付款单信息登记到“付款记录”表中。
解法
Sub payrec() '//2023.4.8
Dim payinfo(1 To 1, 1 To 6) As Variant
With Sheets("付款单")
payinfo(1, 1) = .[I5]
payinfo(1, 2) = CDate(.[d4])
payinfo(1, 3) = .[c11]
payinfo(1, 4) = "付" & .[C6] & .[C9]
payinfo(1, 6) = .[c10]
End With
With Sheets("付款记录")
r = .Cells(.Rows.Count, "a").End(xlUp).Row '求第一个空行并赋值给变量r
.Cells(r + 1, 1).Resize(1, 6) = payinfo
End With
End Sub思路
- 大致上主要分为两部分, 一是从“付款单”表中将所需要的信息提取出来保存在数组中;二是将刚才保存的数组按规定粘贴到“付款记录”表的相应单元格内。
- 根据以上思路,我们需要首先声明一个数组 payinfo, 数组的大小根据“付款记录”表的列数确定。 这里我们定义为一个1行6列的数组。
- 接下来通过with … end with 语句对数组payinfo赋值,完成提取“付款单”表中所需信息的功能。
With Sheets("付款单")
payinfo(1, 1) = .[I5]
payinfo(1, 2) = CDate(.[d4])
payinfo(1, 3) = .[c11]
payinfo(1, 4) = "付" & .[C6] & .[C9]
payinfo(1, 6) = .[c10]
End With
- 然后我们开始操作“付款记录”表,为了避免覆盖已有数据,我们先找出第一个空行:
r = .Cells(.Rows.Count, "a").End(xlUp).Row
- 最后将数组payinfo的值赋予第一个空行所在的六个单元格:
.Cells(r + 1, 1).Resize(1, 6) = payinfo
- 在“付款单”表中插入一个长方形形状, 然后右键点击下拉菜单中选择“指定宏”,在弹出的窗口中选择刚才我们保存的宏payrec。
哦,对了,有的同学不知道如何打开vba编辑器,请看我另一篇介绍。
<hr/>以上都是我自己学习的理解,如有不对之处,请不吝赐教,DADO欢迎大家在评论区交流。 |
|