ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

    [复制链接]

TA的精华主题

TA的得分主题

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


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

对不起,不好意思, 是我看错了.
因为你程序是以序号为IF的,但SHEET2~8中不是以序号排列的,如果按序号应该是SHEET3/4/5/6/7/2/8,
所以当i=2时, sequence number in sheet2<> sequence number in sheet1 , so leap over sheet2  to run i=3去验证sheet 3.......untile i=7 .
      当i=8, it is same reason.
来回切换太费劲了,英语学的不好,不知道能不能看明白.

[ 本帖最后由 zznjcs 于 2009-9-28 16:26 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-9-28 16:34 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-9-28 17:41 | 显示全部楼层
回复  trustwxq 的帖子
原帖由 trustwxq 于 2009-9-27 22:36 发表
增加了两个功能,一是:输入小写变成大写,二是:输入的是字母但代码对应表中如果没有时,选择指定对应关系还是重新输入,选择后进入不同的操作。


第二个功能好科学,呵呵.......学习了。。。!

------------------------------------------------------------------------------
回复 草根粮 的帖子
原帖由 trustwxq 于 2009-9-27 22:36 发表
我发现其中有两个不足的地方:
一、选择I列的多个单元格删除数据时会出错。
二、在I列输入的字母为小写时,乡镇代码列不变,即无法判断。

1、选择I列多个单元格删除数据时会出错——————可以在程序开始时写上:If Target.Count > 1 Then Exit Sub,这样,当发生改变的单元各是多个时,就退出程序,不再执行其他的代码。当然,这样做有一个缺点,就是同时清除多个单元格的内容时,下一列的代码不会清除。我学得可以控制让用户最多只能选中一个单元格,这需要用到Wordsheet的SelectionChange事件,这个事件是当选中的单元格发生改变时被触发。我们只在发生这个事件的时候执行代码:Target.Cells(1).Select,这样当选中的单元格为多个时,只选择选中区域的第一个。完整的代码为:

  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.    Target.Cells(1).Select
  3. End Sub
复制代码
注意,上面的程序同Change事件的过程同样是保存在工作表中。

2、在I列输入的字母为小写时,乡镇代码列不变——————可以选用Uase函数将输入的字母改为大写。在你的程序里,可以把 If Target.Value = Sheets(1).Cells(j, 2) Then这句代码改为If UCase(Target.Value) = Sheets(1).Cells(j, 2) Then即可。

看完你的代码后,我还发现第三个问题,就是当在I列输入字母后,只在该列显示字母,而没有显示相对应的乡镇名称,我要的效果是612楼朋友附件所示的效果。

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

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-9-28 18:32 | 显示全部楼层

回复 草根糖 的帖子

原帖由 草根糖 于 2009-9-28 14:12 发表
另外,再问个问题:
这段代码为什么执行的时候,提示无法获取vlookup属性?Private Sub Worksheet_Change(ByVal Target As Range)   


为什么要用循环呢?感觉好像这样就可以了,我用你的代码改的。

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

信息录入—一举两得——草根糖.rar

15.25 KB, 下载次数: 1071

TA的精华主题

TA的得分主题

发表于 2009-9-28 19:25 | 显示全部楼层
信息录入—一举两得---zznjcs.zip (20.87 KB, 下载次数: 127)

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

TA的精华主题

TA的得分主题

发表于 2009-9-28 20:37 | 显示全部楼层

回复 619楼 ggsmart 的帖子

谢谢老师的详细指导,受益非浅!~
现已修正。
信息录入—一举两得——草根糖循环引用.rar (16.34 KB, 下载次数: 551)

[ 本帖最后由 草根糖 于 2009-9-29 08:29 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-9-28 20:39 | 显示全部楼层

回复 620楼 ggsmart 的帖子

一开始,我怎么也用不对,
经老师修改后,太完美了。
非常感谢!

TA的精华主题

TA的得分主题

发表于 2009-9-28 21:20 | 显示全部楼层
原帖由 zznjcs 于 2009-9-28 16:24 发表

对不起,不好意思, 是我看错了.
因为你程序是以序号为IF的,但SHEET2~8中不是以序号排列的,如果按序号应该是SHEET3/4/5/6/7/2/8,
所以当i=2时, sequence number in sheet2 sequence number in sheet1 , so leap ov ...

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

[ 本帖最后由 zyh196712 于 2009-9-28 22:09 编辑 ]

TA的精华主题

TA的得分主题

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

TA的精华主题

TA的得分主题

发表于 2009-9-28 21:37 | 显示全部楼层
我的代码里现在至少还存在两个缺点:
第一个就是和草根糖说的一样,选择多个删除的时候,后面的一列不能对应删除,所谓对应删除是指选i2:i4后按delete键,然后就删除i2:j4单元格中的内容,这个问题好解决,在总IF后面加上一个IF Target.count<>1 then……就行了,但是按住CTRL键选择两个区域时,如I2,I4,I6再按Delete删除时就会删除J列相应值的同时无限循环,程序执行不停止,毕竟同时选中多个单元格删除数据的功能是很方便也很人性化的一个;
第二个问题就是当输入字母在字母在对照表中没有时,程序付给Target单元格""后,程序需要多循环一圈,可能是程序的逻辑顺序有问题。
第二个问题相对来讲好解决一些,第一个不知如何解决,今天同事结婚我喝多了,想不出来了!大家集思广益,说不定多少年后依靠我们的力量能开发出中国版的windows操作系统呢,呵呵~~,说着玩呢!

[ 本帖最后由 trustwxq 于 2009-9-28 22:30 编辑 ]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 16:08 , Processed in 0.051633 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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