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-29 13:42 | 显示全部楼层

回复 trustwxq 的帖子

本帖已被收录到知识树中,索引项:开发帮助和教程
1、选择多个删除的时候,后面的一列不能对应删除———我觉得可以这样,首先在前面加上一个IF Target.count<>1 then……Else……End If语句,分别对改变的单元格个数不等于1和等于1的时候设置相应的代码,等于1的时候很简单,大家都做了例子。对于不等于1的时候,我觉得可以在选中的区域里设置循环,把对多个单元格区域的处理变成对多个单个单元格的处理,处理的思路和对target.count=1时的处理思路一样,只不过在外面加了一层循环而已。我的基本的思路为:

  1. If Target.Column = 9 And Target.Row > 2 Then
  2.    If Target.Count = 1 Then
  3.      '语句块
  4.    Else
  5.      Dim rng As Range
  6.      For Each rng In Selection '在选中的区域内循环
  7.          '语句块
  8.      Next
  9.   End If
  10. End If
复制代码
2、程序需要多循环一圈———造成程序循环的原因是单元格的数值被修改了,因为每次修改都会触发Worksheet的Change事件,所以程序会多次执行。
比如,我们需要在我们输入的值的后面加上“公司”两个字,那该怎么做呢?如果输入以下的代码:

  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.    Target.Value = Target.Value & "公司"
  3. End Sub
复制代码
用了上面的代码,你会发现程序会一直运行下去,因为每执行一次程序都会对单元格进行修改,每一次修改都会触发Change事件,每次发生Change事件,程序都会执行......总是这样,一直没个完。
如何让程序只运行一次呢?有办法,使用Application.EnableEvents = False语句即可。使用了这句语句后,就禁止了事件的发生,当你在修改单元格的数值后就不会再触发工作表的Change事件了。使用它后将不会出现事件的“连锁反应”,就不会重复执行程序了。但要注意的是,在程序结束时需要用 Application.EnableEvents = True把它的属性改回来,因为Excel不会自动去替我们修改它。
知道了这个,上面的程序可以设计为:

  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
复制代码
============================
关于Application.EnableEvents 属性,可以通过下面的实例来认识,你也动手做一做,通过在某单元格输入数值,会自动得出所输入的数值的和,也就是累加,效果如图所示.
数据累加.gif

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

TA的精华主题

TA的得分主题

发表于 2009-9-29 13:46 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-9-29 13:47 | 显示全部楼层

TA的精华主题

TA的得分主题

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

回复 zyh196712 的帖子

请问zyh196712朋友问的问题还是前面对应序号的问题吗?不知道现在是不是真的解决并理解了。

还有,我也发下感慨,我的英语也是差到不能再差了。呵呵。。。记得初三的时候,老是被老师抓到楼梯间站着面壁思过,后来我一直怀疑那级楼梯是不是已经被我踩得发光并能照出自己的影子了,呵呵........好痛苦也有好有意思的童年。

我个人觉得,英语学好了,对学习写程序很有帮助,但并不是没会英语就不能学程序,只是花的时间多点而已。让所有和我一样不懂英语的人一起努力,好好学习吧。

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

TA的精华主题

TA的得分主题

发表于 2009-9-29 14:43 | 显示全部楼层
好棒啊,找了好久才找这,只有你才说得最通俗易懂,严重支持楼主,希望继续发贴!

TA的精华主题

TA的得分主题

发表于 2009-9-29 15:34 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-9-29 15:45 | 显示全部楼层

请教大家一个问题WORD VBA的

我要用VBA 制作一个点击下就能在WORD中最后一页的右下角插入一个图片,代码该如何写,望大家不吝赐教

TA的精华主题

TA的得分主题

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

关于Worksheet的SelectionChange事件

Worksheet的SelectionChange同Change事件差不多,选择的单元格发生变化后就会触发Worksheet的SelectionChange事件,明白了Change事件,再来看SelectonChange事件就简单多了。前面有朋友已经在自己的代码里用到了这个事件,这里我就不再多说,通过一个例子来认识他吧。
           如果我们想看一看选中的区域里有没有字母“A”,如果有,则把字母“A”改成红色,我们就可以用这个事件,看图片效果:

1.gif



====================
            看了上面的图片,你可以先做一做,这里,我传上我的附件,供大家参考。 字母A变红色.rar (10.48 KB, 下载次数: 3152)

TA的精华主题

TA的得分主题

发表于 2009-9-29 16:53 | 显示全部楼层
我用VLOOKUP()试过了,怎么还是不可以.
系统会提示;
Run-time error '1004':
Unable to get the Vlookup property of the WorksheetFunction class

没办法执行这个函数.

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-9-29 17:04 | 显示全部楼层
原帖由 zznjcs 于 2009-9-29 16:53 发表
我用VLOOKUP()试过了,怎么还是不可以.
没办法执行这个函数.

       查询出错的原因“草根糖”朋友在下面(http://club.excelhome.net/viewthread.php?tid=470603&page=63#pid3201703)已经讲了,你应该把对target的修改放在第二句。
        另外,如果用了Vlookup函数,还有必要用Cace语句吗?如果用了Case语句,我觉得就没必要用Vlookup函数了。对于这个问题,我个人推荐不使用Case语句,现在的数据很少,用Case语句的话不会太麻烦,那如果有100种情况,200种情况,甚至更多的时候,那在程序设计时需要写多少句Case???

[ 本帖最后由 ggsmart 于 2009-10-2 15:01 编辑 ]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

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

Powered by Discuz! X3.4

© 1999-2021 Wooffice Inc.

   

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

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

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