关于EXCEL中使用VB的2个小问题

[复制链接]
查看11 | 回复6 | 2011-6-17 06:31:03 | 显示全部楼层 |阅读模式
1.比如我在宏中设定了处理数据的范围A2到B3。但如果我在AB之间插入了一列新数据,我要怎样才能保证ABC3列数据都被处理呢?我现在是插入新数据之后原先的数据被挤出范围,不能进行处理,必须手动在代码中修改范围。

2.可不可以让宏一直处于查询状态,一旦用户修改了excel表格,宏就运行一次,对修改进行处理,这样电脑会不会非常卡?

小妹第一次用VB,也是第一次用宏,谢谢大牛们~~或者大家推荐点好用的书来看也行,最好能指明相关章节~~~回答的好加分哦~~
回复

使用道具 举报

千问 | 2011-6-17 06:31:03 | 显示全部楼层
问题1:将你预定的处理范围,例如A2:B3,定义一个名称,方法是,在Excel97~2003中,选定你要处理的范围,然后通过“插入”—“名称”——“定义”菜单,然后输入一个名称即可。在Excel2007~10中,选定范围后,右键选择“定义名称”即可。注意名称需要符合规范。然后在VBA中,将引用的区域,由类似Range(\"A2:B3\")这样的方式,更改成你所定义的名称即可,例如名称叫“AT”,则修改成Range(\"AT\")。这样,引用的范围会随插入的行与列自动扩充。

问题2:请在VBA编辑器中,把你的宏代码,插入在如下语句之间:
PrivateSubWorksheet_Calculate()

EndSub
即可实现表格中任意单元格内容有变化或经过编辑后,都会自动运行。
以上语句,可在VBA编辑器中,代码编辑窗口中左上下拉框中选定“worksheet”后,从右边下拉框中选定“calculate”后自动生成。
运行起来卡与不卡,和电脑配置与代码内容相关,一般来说,简单的宏在主流配置电脑下不会卡。









<h4class=\"ask\">追问


谢谢你,我试了把代码插入在
PrivateSubWorksheet_Calculate()

EndSub
中间,但是它会一遍一遍循环执行的样子呢。是不是因为我的宏操作也是对excel内容进行了修改,所以再次触发了呢?不知道有什么办法能解决吗?
回复

使用道具 举报

千问 | 2011-6-17 06:31:03 | 显示全部楼层
有形成了循环这个可能性。肯定可以解决,不过需要你提供你的代码,这样才能具体分析。你可以把代码直接贴出来,也可以提供一个邮箱等。
PS,第一个问题解决了吗?
回复

使用道具 举报

千问 | 2011-6-17 06:31:03 | 显示全部楼层
恩,第一个问题解决了~~
我贴一下代码,完整的比较长,我取比较典型的段落,因为实现的功能都差不多。


<ahref=\"http://hiphotos.baidu.com/zhidao/pic/item/1b4c510f1ec847746059f3f4.jpg\"class=\"replyask-img-e\"title=\"点击查看大图\"target=\"_blank\">
<imgsrc=\"http://hiphotos.baidu.com/zhidao/abpic/item/1b4c510f1ec847746059f3f4.jpg\"/>
</a>
回复

使用道具 举报

千问 | 2011-6-17 06:31:03 | 显示全部楼层
贴出代码是为了在运行中测试、调试和修改。您以图片形式粘贴上来,而且只有一部分,这真的让人很崩溃。。。能否把文件,至少是全部代码发过来啊?
回复

使用道具 举报

千问 | 2011-6-17 06:31:03 | 显示全部楼层
请问Change事件是怎样设置的呢?
回复

使用道具 举报

千问 | 2011-6-17 06:31:03 | 显示全部楼层
你的查询一般要改变某些单元格的内容,所以要用:
PrivateSubWorksheet_Change(ByValTargetAsRange)
Application.EnableEvents=False
\'更改内容的代码
Application.EnableEvents=True
EndSub
不然,Change事件中对单元格的改变又会引发Change事件,从而导致死循环
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行