ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

    [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-8-23 13:47 | 显示全部楼层
本帖已被收录到知识树中,索引项:开发帮助和教程
处理单元格数据


  VBA程序设计的最终目的是什么?更多的当然是为了处理数据。所以,这一贴,将来讲一讲用VBA处理单元格区域。当然,因为我知道的本身不多,所以,并不能把所有的东西都告诉你,我只是举一些简单的例子,供大家学习作参考用。
  建议大家在读贴的过程中,动动手,亲自试一试,相信这样的亲身经历会给你的学习带来一定的帮助。
  一、复制单元格区域
  如果你感到无从着手,别忘了“录制宏”的功能。虽然录制宏生成的代码不是最有效的,但它生成的代码可以为我们提供很多的信息。
  好了,闲话不说。自行录一段复制A1单元格到B1单元格的宏。打开VBE编辑器,得到如下代码:
  

  1.   Sub Macro1()
  2.   '
  3.   ' Macro1 Macro
  4.   ' 宏由 ggsmart 录制,时间: 2009-8-23
  5.   '

  6.   '
  7.       Range("A1").Select
  8.       Selection.Copy
  9.       Range("B1").Select
  10.       ActiveSheet.Paste
  11.   End Sub
  12.   
复制代码

  除去注释的部分,实际上只有句代码。不用我细讲,大家已经知道它们的作用分别是:第一句选中A1单元格,第二句复制选中的单元格,第三句选中B1单元格,第四句粘贴。
  但是,就像我们用VBA在单元格输入数据不用先选中它一样,我们同样可以在不选中单元格的情况下就执行复制粘贴命令。所以,以上的代码实际上我们可以简化为:
  

  1.   Sub Macro1()
  2.       Range("A1").Copy Range("B1")
  3.   End Sub
  4.   
复制代码

  以上的代码只是发生在活动工作表内,如果要在其他工作薄或工作薄中实现复制粘贴的命令,只需要改变引用即可。如我们要将Book1.xls的第一个工作表中的A1:A10复制到Book2.xls的第一个工作表中的B1:B10单元格,则代码为:
  

  1.   Sub mycopy()
  2.      Workbooks("book1").Sheets(1).[a1:a10].Copy _
  3.      Workbooks("book2").Sheets(1).[b1:b10]
  4.   End Sub
  5.   
复制代码

  

  提示:一行的代码过长,可以用空格加下划线进行换行。
  

  复制的区域过大时,对于目标区域,我们可以只指定一个单元格,这时它代表目标区域的左上角单元格。如上面的代码,我们可以写成这样:
  

  1.   Sub mycopy()
  2.      Workbooks("book1").Sheets(1).[a1:a10].Copy _
  3.      Workbooks("book2").Sheets(1).[b1]
  4.   End Sub
复制代码

如果你需要只粘贴数值,或其他什么,你可以利用录制选择性粘贴的宏来进行修改。同样的道理,我就不再多说。
  二、剪切单元格
  剪切单元格,或者说移动单元格和复制单元格类似,有了上面的经验,我们不难得到它的语句。其实它和复制单元格的命令大同小异,唯一不同的是使用Cut方法代替了Copy方法。
  下面的代码是将A1:A10单元格的数移动到B1:B10单元格:
  

  1.   Sub mycut()
  2.     [a1:a10].Cut [b1]
  3.   End Sub
  4.   
复制代码

  三、删除单元格
  删除一个单元格的命令也很简单,调用Range对象的Delete方法即可。同我们用鼠标操作一样,同样有四个选项,下面以删除A1单元格为例:
  

  1.   [a1].Delete Shift:=xlUp '   下方单元格上移
  2.   [a1].Delete Shift:=xlToLeft '    右侧单元格左移
  3.   [a1].EntireRow.Delete '   整行删除
  4.   [a1].EntireColumn.Delete '   整列删除
  5.   
复制代码

  只写成[a1].Delete时,默认为“下方单元格上移”。
  

[ 本帖最后由 ggsmart 于 2009-8-23 13:48 编辑 ]

评分

13

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-8-23 16:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
很不错,学习了下,对vba有了初步的认识!

非常感谢!

TA的精华主题

TA的得分主题

发表于 2009-8-23 16:54 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
楼主可能忘记了吧,你不是说在下一贴时公布密码吗?你忘性真好,好多人可就不干了...
哪家伙,怎么说是非常期待,哪可是相当期待,都在这儿憋着呢?.....

TA的精华主题

TA的得分主题

发表于 2009-8-23 21:51 | 显示全部楼层
留名  等我先步入中级玩家再研究  现在在研究函数公式和数据透视表

TA的精华主题

TA的得分主题

发表于 2009-8-23 22:07 | 显示全部楼层
风趣的描述增强了文章的可读性,支持楼主,幸苦啦!

TA的精华主题

TA的得分主题

发表于 2009-8-24 01:20 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-8-24 16:54 | 显示全部楼层
真是太感谢楼主了,经过这段时间的学习,现在基本对VB开始感兴趣了。这是阅读感觉越有兴趣,希望楼主能更新更多好东西。期待中……

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-8-24 17:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Range对象的End属性

  Range对象有一个End属性,也许你在阅读别人的例子里经常会看到如“[A65536].End(xlUp).Row”这样的语句,这就是End属性的利用。
  End属性应用于Range对象,同样也返回一个Range对象。该对象代表包含源区域的区域结尾处的单元格。如果你还是不明白,那请你在工作表里试一试,分别按Ctrl+上、下、左、右方向键,看看得到的是什么?End属性返回的单元格就相当于在源单元格按住Ctrl键+上(或下、左、右)方向键所得到的单元格。它的语句格式简单写为:
  源区域.End(移动方向)
  移动方向可以是:
  xlToLeft :向左移动,相当于在源区域按Ctrl+左方向键。
  xlToRight:向右移动,相当于在源区域按Ctrl+右方向键。
  xlUp:向上移动,相当于在源区域按Ctrl+上方向键。
  xlDown:向下移动,相当于在源区域按Ctrl+下方向键。
  所以在程序设计的过程中,很多人喜欢用“[A65536].End(xlUp).Row”语句来返回A列的最后一个非空单元格的行号。
  如果当前活动工作表的A列填写的是学生的姓名,现在我们想在表中A列最后一个学生的后面增加一个叫“张青”的学生,则代码为:
  

  1.   ActiveSheet.Cells([A65536].End(xlUp).Row + 1, 1).Value = "张青"
  2.   
复制代码
  语句 [A65536].End(xlUp).Row + 1中,行号加1的目的是在最后一个非空单元格的下一个单元格里输入数据。需要注意的是:如果你的A列全为空的话,“[A65536].End(xlUp).Row”这个语句返回的是1。
  
  我们来做一个简易的学生信息录入的例子:
  (1)点工作表中的“录入资料”按钮,弹出“录入”窗体;
  (2)录入信息后,点击“确定”按钮即完成记录追加;
  (3)不考虑录入内容是否规范。

  详细请看附件, 信息录入.rar (11.09 KB, 下载次数: 14461) 附件没有设密码,希望大家尝试过后再看代码!
  
        当然,并不是说End属性都可以得到最后的单元格。有些时候是返回不了的,很久以前,我就曾经遇到过存在假空单元格的情况,差点没把我弄疯。关于End属性,看看此贴,也许对你会有帮助:http://club.excelhome.net/viewthread.php?tid=189115&page=1#pid1251339
  

[ 本帖最后由 ggsmart 于 2009-8-25 12:30 编辑 ]

评分

8

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-8-24 17:22 | 显示全部楼层
真的很惭愧,[小试牛刀]制作个性化的欢迎界面 等到答案公布的时候还不会做,争取下个作业题能够提交答案……

TA的精华主题

TA的得分主题

发表于 2009-8-24 22:34 | 显示全部楼层

最新21章PPT文件

TO:老师辛苦了!
CC:家里所有的VBA爱好者:
    我更新了1-21章PPT内容,请家里人下载使用;
菜鸟谈VBA最最基础入门《原创》001.part01.rar (200 KB, 下载次数: 7232)
菜鸟谈VBA最最基础入门《原创》001.part02.rar (200 KB, 下载次数: 5323)
菜鸟谈VBA最最基础入门《原创》001.part03.rar (200 KB, 下载次数: 5049)
菜鸟谈VBA最最基础入门《原创》001.part04.rar (200 KB, 下载次数: 5345)
菜鸟谈VBA最最基础入门《原创》001.part05.rar (160.14 KB, 下载次数: 5619)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-25 09:20 , Processed in 0.053349 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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