ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

EH搜索     
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
一招顶“一万招”的懒人技巧 Excel 2016函数公式学习大典 Office知识技巧免费学 打造核心竞争力的职场宝典
300集Office 2010微视频教程 Tableau-数据可视化工具 精品推荐-800套精选PPT模板,点击获取 ExcelHome出品 - VBA代码宝免费下载
你的Excel 2010实战技巧学习锦囊 欲罢不能, 过目难忘的 Office 新界面 Excel VBA经典代码实践指南
楼主: ggsmart

菜鸟谈VBA最最基础入门《原创》

    [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-9-27 14:23 | 显示全部楼层

关于花名册汇总

本帖已被收录到知识树中,索引项:开发帮助和教程
在前面“学生花名册汇总”的实例里,大家在处理起来,多数采用复制粘贴的操作方法来完成,在简单学习了数组后,有一位朋友也使用了数组的方式来操作。两种方式在处理问题时,谁的效率会更好一点?我作了一个对比,这里,借用了前面贴子里moon2778的例子里的代码。为了看出效果,我将这两种代码分别循环执行了10次,在我的电脑上,用复制操作完成的时间居然差不多是用数组操作所用时间的8倍。

       原表中只有105条记录需要处理,时间就相差8倍,那如果有成千上万条数据呢?可想而知。

       所以。。。在需要进行大批量数据处理的时候,希望大家都用数组去处理。呵呵......

[ 本帖最后由 ggsmart 于 2009-9-27 14:24 编辑 ]

学生花名册汇总.rar

26.55 KB, 下载次数: 1117

TA的精华主题

TA的得分主题

发表于 2009-9-27 15:22 | 显示全部楼层
真是太棒了,受益非浅呀!!

TA的精华主题

TA的得分主题

发表于 2009-9-27 15:28 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-9-27 15:44 | 显示全部楼层

Worksheet的Change事件

  “事件”在前面的贴子里我们已经接触过了,如果你还不清楚,回过头去花上几分钟看一看。
  当工作表单元格数值被修改后,就会触发Worksheet的Change事件,我们可以通过写一些语句响应这个事件来完成一些工作,下面我们通过一些例子来认识它。
  打开一个工作薄,点击工作表名称标签,选择“查看代码”命令进入VBE编辑窗口,在代码窗口的对象列表中选择“Worksheet”,在事件列表中选择“Change”,这时代码窗口中会出现一段代码:

  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.    
  3. End Sub
复制代码
  相关说明:
  1、Worksheet是对象名,Change是事件名称,对象名称和事件名称用下划线连接;
  2、(ByVal Target As Range):括号里的是程序运行传递的参数,Target是一个Range对象,即单元格区域,指触发Change事件的单元格,也就是数值被修改了的单元格。
  3、我们只需要将所需要执行的代码写在Sub与End Sub之间,这样,在工作表的某个单元格发生改变时,就自动执行Sub与End Sub之间的程序代码。

  如果我们需要在每一次单元格修改之后都告诉我们这个单元格的地址是多少,则代码可以为:

  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.    MsgBox "刚刚修改的单元格地址是:" & Target.Address
  3. End Sub
复制代码
  这样,当我们修改了某个单元格后,都会自动弹出一个对话框告诉我们刚刚修改的格的地址是多少。

  如果我们想只有修改某个单元格区域,比如D列的单元格的时候,才弹出这个对话框告诉我们,也是可以的,那代码为:

  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.   If Target.Column = 4 Then '当改变的单元格的列号为4,即为D列时执行程序
  3.       MsgBox "刚刚修改的单元格地址是:" & Target.Address
  4.   End If
  5. End Sub
复制代码
  有时,为了减少工作表信息的输入工作,我们会利用到Worksheet的Change事件,例如有一相记录学生借书或还书情况的工作表,C列2行以下的区域记录图书“借出”或“归还”的情况,需要在每一次更改“借出”或“归还”状态时,都在同行的D列记录下更改的日期,则代码可以为:

  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. '当被修改的单元格只有一个,且列号等于3,行号大于2时执行程序
  3.     If Target.Count = 1 And Target.Column = 3 And Target.Row > 2 Then
  4.         Target.Offset(0, 1) = Date '被修改的单元格的右面一个单元格的值为当前日期
  5.     End If
  6. End Sub
复制代码
  因为工作的原因,很久没有来了,今天就给大家讲这个很简单的事件,很容易理解。由于时间匆忙,难免有不全面的地方,如有不明白的,希望大家跟贴一起讨论,最后,也给大家留一个练习的题目吧!

  相关附件:
    1、实例:图书—自动录入时间 图书-自动录入时间.rar (7.61 KB, 下载次数: 4210)

评分

参与人数 2鲜花 +3 收起 理由
hope9966 + 2 太强大了
huaich + 1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-9-27 21:28 | 显示全部楼层

我的作业!

早早的交上作业,呵呵~~
信息录入—一举两得.rar (13.45 KB, 下载次数: 1603)

TA的精华主题

TA的得分主题

发表于 2009-9-27 21:48 | 显示全部楼层
原帖由 zznjcs 于 2009-9-26 21:48 发表

我试过了,一样的代码,只是把三个变量定义一下类型就可以了呀.


谢谢!弱弱的问下,你的全部能复制吗?我试了一下,为什么我的第2张表和第8张表没有复制(复制1~89)。
我定义的变量是:Dim start As Double, i As Byte, aa As Long, bb As Long。

TA的精华主题

TA的得分主题

发表于 2009-9-27 22:36 | 显示全部楼层

又增加了一点功能,作业重新交了!

增加了两个功能,一是:输入小写变成大写,二是:输入的是字母但代码对应表中如果没有时,选择指定对应关系还是重新输入,选择后进入不同的操作。
信息录入—一举两得.rar (15.7 KB, 下载次数: 1577)

TA的精华主题

TA的得分主题

发表于 2009-9-28 10:42 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-9-28 12:49 | 显示全部楼层
楼主老师终于又出新章了。
能在百忙之中抽出时间来教我们,非常难得!
请接受我由衷的感谢!

我这次的作业。 信息录入—一举两得——草根糖.rar (15.54 KB, 下载次数: 475)

TA的精华主题

TA的得分主题

发表于 2009-9-28 14:12 | 显示全部楼层
另外,再问个问题:
这段代码为什么执行的时候,提示无法获取vlookup属性?
  1. Private Sub Worksheet_Change(ByVal Target As Range)   
  2. Dim i%, j%
  3.     i = Sheets(2).[i65536].End(xlUp).Row   
  4.   For j = 2 To i Step 1
  5.     If Target.Count = 1 And Target.Column = 9 And Target.Row > 2 Then
  6.        Cells(j, 10) = Application.WorksheetFunction.VLookup(Sheets(2).Cells(j, 9), Sheets(1).Range("B2:D10"), 3, 0)
  7.     End If
  8.   Next
  9. End Sub
复制代码
请各位老师同学帮忙。
谢谢!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关注官方微信,每天学会一个新技能

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2021-5-16 17:52 , Processed in 0.072800 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2021 Wooffice Inc.

   

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:徐怀玉律师 李志群律师

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