| 
 | 
 
大家都知道运用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欢迎大家在评论区交流。 |   
 
 
 
 |