ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: ggsmart

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

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2009-9-27 15:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:开发帮助和教程
真是太棒了,受益非浅呀!!

TA的精华主题

TA的得分主题

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

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-9-27 15:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

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, 下载次数: 4348)
    2、作业:信息录入—一举两得 信息录入—一举两得.rar (10.37 KB, 下载次数: 4027)

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

评分

2

查看全部评分

TA的精华主题

TA的得分主题

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

我的作业!

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

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 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

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

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

[ 本帖最后由 trustwxq 于 2009-9-27 22:38 编辑 ]

TA的精华主题

TA的得分主题

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

TA的精华主题

TA的得分主题

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

我这次的作业。 信息录入—一举两得——草根糖.rar (15.54 KB, 下载次数: 484)
我发现其中有两个不足的地方:
一、选择I列的多个单元格删除数据时会出错。
二、在I列输入的字母为小写时,乡镇代码列不变,即无法判断。
请老师指导。

TA的精华主题

TA的得分主题

发表于 2009-9-28 14:12 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
另外,再问个问题:
这段代码为什么执行的时候,提示无法获取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
复制代码
请各位老师同学帮忙。
谢谢!

TA的精华主题

TA的得分主题

发表于 2009-9-28 16:11 | 显示全部楼层
这个讲的太及时了,我正在搞一个文档,想输入一个单元格,然后会将这一行变相应的颜色.正好用上了.
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 17:37 , Processed in 0.051595 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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