ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2009-9-29 22:19 | 显示全部楼层
本帖已被收录到知识树中,索引项:开发帮助和教程
谢谢ggsmart在635楼的讲解,看了以后有一种感觉叫大彻大悟,真好!ggsmart是真正的高手,讲解的非常细致,而且很透彻。听课还是要听当老师的讲的课,因为老师知道如何讲、重点在什么地方!

TA的精华主题

TA的得分主题

发表于 2009-9-30 08:37 | 显示全部楼层
看附件,VLOOKUP()运行不了.
信息录入—一举两得can't run vlookup---zznjcs.zip (21.39 KB, 下载次数: 233)

TA的精华主题

TA的得分主题

发表于 2009-9-30 08:57 | 显示全部楼层
原帖由 ggsmart 于 2009-9-29 13:42 发表
1、选择多个删除的时候,后面的一列不能对应删除———我觉得可以这样,首先在前面加上一个IF Target.count1 then……Else……End If语句,分别对改变的单元格个数不等于1和等于1的时候设置相应的代码,等于1的时候很 ...


又学习了新知识~
谢谢老师!

TA的精华主题

TA的得分主题

发表于 2009-9-30 09:09 | 显示全部楼层
原帖由 zznjcs 于 2009-9-30 08:37 发表
看附件,VLOOKUP()运行不了.
592253


按照你现在的代码,是先改变了街道的名称,后用vlookup,这样的话vlookup引用的对象就发生变化,由字母变成了汉字,而“代码”表中的源数据是字母,vlookup又怎么能用呢?

正常情况下,应该先用vlookup,后再改变乡镇街道的名称。
即:target=……应放在target.offset(0,1).value=……的后面。

TA的精华主题

TA的得分主题

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

回复 649楼 草根糖 的帖子

有道理,改为汉字后的CHANGE事件在作怪!不过APPLICATION.ENABLEEVENTS=??还是不会用,先=FALSE后,后面的就不执行了,后=FALSE后第二次改变单元格值时,CHANGE事件就不起作用了,是不是需要其他事件如SELECTIONCHANGE事件来做配合啊!

TA的精华主题

TA的得分主题

发表于 2009-9-30 09:57 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-9-30 10:10 | 显示全部楼层
原帖由 trustwxq 于 2009-9-30 09:47 发表
有道理,改为汉字后的CHANGE事件在作怪!不过APPLICATION.ENABLEEVENTS=??还是不会用,先=FALSE后,后面的就不执行了,后=FALSE后第二次改变单元格值时,CHANGE事件就不起作用了,是不是需要其他事件如SELECTIONCHAN ...


还是你研究的透彻啊~!
照这样的话,在保存之前,第二次修改是不起作用了,呵呵。

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-9-30 10:13 | 显示全部楼层

回复 trustwxq 的帖子

1、APPLICATION.ENABLEEVENTS=??还是不会用,先=FALSE后,后面的就不执行了,后=FALSE后第二次改变单元格值时,CHANGE事件就不起作用了——————false后,不是不执行代码,代码照样要执行,只是在用代码对某对象进行操作(比如修改)之后,不会在触发该对象的某个事件,也就是写在这个事件里的代码不会再执行。
还用上面那个加“公司”两个字的代码作举例:

  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.    Target.Value = Target.Value & "公司"
  3. End Sub
复制代码
如我们在A1单元格输入“皮包”两个字,我们的目的是要在A1单元格输入“皮包公司”。但是在实际中,如果我们输入“皮包”,就是把单元格从空修改成“皮包”,就触发了Change事件,那么执行语句Target.Value = Target.Value & "公司"
,将target,即A1单元格的值改为A1单元格的原值“皮包”加上“公司”两个字变成“皮包公司”四个字。这种从两个字变为四个字的修改又触发了Change事件,又再一次执行Change事件里面的语句,将“皮包公司”改为“皮包公司公司”,这种改变又触发Change,又再一次执行语句.......总是这样,没个尽头。

但是如果我们把代码写成:

  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.   Application.EnableEvents = False
  3.     Target.Value = Target.Value & "公司"
  4.   Application.EnableEvents = True
  5. End Sub
复制代码
这样,当我们在单元格里输入“皮包”时,触发了Change事件,运行中间的代码,首先运行的是Application.EnableEvents = False,修改了这个属性后,我们在下面将“皮包”改成“皮包公司”后就不会再触发Change事件了,这样程序就不会再执行第二遍。但是如果我们在最后不把它的属性改成True,以后我们修改单元格时也同样不会触发Change事件,也就不会再运行程序了,所以在最后得把它改回来。

2、是不是需要其他事件如SELECTIONCHANGE事件来做配合啊! ——————是的,很多时候都需要这两个事件配合起来用,比如上面说的加“公司”,还有单元格数据的累加时候都可能会需要到。还是加“公司”的例子,当你输入“皮包”后,回车,单元格会自动变为“皮包公司”,可当我们再一次双击该单元格,但并不对单元格进行值的修改时,也会变为“皮包公司公司”,而实际上我们并没有修改它的值。那么,我们就可以用这个事件配合Change事件判断单元格的值是否修改了。
代码可为:

  1. Dim x '定义一个公共变量,让两个程序都可以用
  2. Private Sub Worksheet_Change(ByVal Target As Range)
  3.   If Target.Value = x Then Exit Sub '如果修改的单元格的值等于变量x的值,退出程序
  4.   Application.EnableEvents = False
  5.     Target.Value = Target.Value & "公司"
  6.   Application.EnableEvents = True
  7. End Sub

  8. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  9.    x = Target.Value '将选中的单元格的值赋给变量x
  10. End Sub


复制代码

[ 本帖最后由 ggsmart 于 2009-10-2 15:16 编辑 ]

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-9-30 10:39 | 显示全部楼层
呵呵,总算从头看到尾了,鉴于本人多少知道些VBA,所以只是看了一遍,感觉收获还是很大的。版主和各位同学的帖子给予我很多启发,特别是数组与单元格区域之间的相互赋值,禁止change事件的触发等等,看出来版主对VBA还是比较熟悉的,向您学习、致敬。
看到好些提问的贴想回没好意思回,是因为没看完所有帖子还不知道相关问题是否有人回答过了,我想对一些简单提问,也许能帮上楼主的忙。

[ 本帖最后由 zbwxlxy 于 2009-9-30 10:42 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-9-30 11:03 | 显示全部楼层
原帖由 trustwxq 于 2009-9-29 22:19 发表
谢谢ggsmart在635楼的讲解,看了以后有一种感觉叫大彻大悟,真好!ggsmart是真正的高手,讲解的非常细致,而且很透彻。听课还是要听当老师的讲的课,因为老师知道如何讲、重点在什么地方!

呵呵,有同感。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-3-29 19:44 , Processed in 0.058507 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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