办公问答网

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 90|回复: 0

EXCEL技能

[复制链接]

5

主题

7

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2023-4-18 09:23:45 | 显示全部楼层 |阅读模式
大家都知道运用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欢迎大家在评论区交流。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|办公问答网

GMT+8, 2025-3-16 00:23 , Processed in 0.089949 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc. Templated By 【未来科技 www.veikei.com】设计

快速回复 返回顶部 返回列表