ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2009-9-28 22:11 | 显示全部楼层
本帖已被收录到知识树中,索引项:开发帮助和教程
原帖由 ggsmart 于 2009-9-27 13:22 发表


你的目的是想让汇总后的工作表的学生信息按分表的学生的序号的顺序分别写入,对吧。单从现在的工作表的数据来看,不考虑序号有其他变化(比如间断,现在的文件里的序号是连续的,即从1——N号),那给你提供一个 ...


谢谢你在百忙之中为我解答!

TA的精华主题

TA的得分主题

发表于 2009-9-28 22:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 zyh196712 于 2009-9-28 21:20 发表

哦,是i有问题!现在总算明白了!这样的话将表的位置换一下就可以了,我试了,成功!谢谢你了!
想问一下:就算你英语不好,那你这些是怎么写出来的?英语我压根就没学过,我要借助有道工具才能看懂啊!

英语不好可以学编程,但是学起来会很吃力,建议同时学习英语,这样两方面可以同时提高,真是和题目一样“一举两得”啊!

TA的精华主题

TA的得分主题

发表于 2009-9-29 08:13 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 trustwxq 于 2009-9-28 21:37 发表
我的代码里现在至少还存在两个缺点:
第一个就是和草根糖说的一样,选择多个删除的时候,后面的一列不能对应删除,所谓对应删除是指选i2:i4后按delete键,然后就删除i2:j4单元格中的内容,这个问题好解决,在总IF后面加上一个IF Target.count<>1 then……就行了


首先赞一个!你的代码有很多可以学习的地方。
按照你说的在总if后面加……,我一开始就试过,没有成功,不知道是什么原因。
我的代码加上后,就会都是执行总then后面的语句。很郁闷!~

TA的精华主题

TA的得分主题

发表于 2009-9-29 08:26 | 显示全部楼层
原帖由 草根糖 于 2009-9-29 08:13 发表


首先赞一个!你的代码有很多可以学习的地方。
按照你说的在总if后面加……,我一开始就试过,没有成功,不知道是什么原因。
我的代码加上后,就会都是执行总then后面的语句。很郁闷!~

我也在想如果IF TARGET.COUNT<>1, 那一个单元格改动的时候不就执行THEN后面的语句了吗?

TA的精华主题

TA的得分主题

发表于 2009-9-29 09:00 | 显示全部楼层
原帖由 zznjcs 于 2009-9-28 19:25 发表
591570

程序好麻烦,想用个VLOOKUP.可是写的总是不对,找不到原因.
楼主看看指导一下.


原代码:
  1.          Case Is = "B"
  2.             Target = "百花湖乡"
  3.             Target.Offset(0, 1) = "520181002"
  4.             Target.Offset(0, 1).Value = Application.WorksheetFunction.VLookup(Target.Value, Sheets(1).Range("B2, B10"), 2, 0).Value
复制代码
修改成:
  1.          Case Is = "B"
  2.             Target.Offset(0, 1).Value = Application.WorksheetFunction.VLookup(UCase(Target.Value), Sheets(1).[B2:D10], 3, 0)
  3.             Target = "百花湖乡"
复制代码
即可。

TA的精华主题

TA的得分主题

发表于 2009-9-29 09:36 | 显示全部楼层
原帖由 草根糖 于 2009-9-29 08:13 发表
首先赞一个!你的代码有很多可以学习的地方。
按照你说的在总if后面加……,我一开始就试过,没有成功,不知道是什么原因。
我的代码加上后,就会都是执行总then后面的语句。很郁闷!~

你可能没有完全理解我的意思,应该是有一个if target.count<>1 and target.comumn=9 and target.row>2 and…… then……这样的一个条件语句。我昨天只是简单的写了写,我试过一次连续的单元格区域是可以的,不连续的才会出现无限循环。

TA的精华主题

TA的得分主题

发表于 2009-9-29 09:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

回复 632楼 trustwxq 的帖子

貌似,昨天我也碰到了死循环,呵呵~
3Q!~

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-9-29 10:19 | 显示全部楼层
原帖由 zznjcs 于 2009-9-28 19:25 发表
591570

程序好麻烦,想用个VLOOKUP.可是写的总是不对,找不到原因.楼主看看指导一下.

请参照前面例子,昨天有朋友已经用过Vlookup来做了。`http://club.excelhome.net/viewthread.php?tid=470603&amp;page=60#pid3198119

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

TA的精华主题

TA的得分主题

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

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 编辑 ]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 18:45 , Processed in 0.045214 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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