ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] VBA入门指南——献给在这里得到帮助但看不懂代码的朋友(已建电梯)

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2009-1-19 10:33 | 显示全部楼层

很好

本帖已被收录到知识树中,索引项:开发帮助和教程
若再增加一些界面的截屏说明,效果会更好,加油

TA的精华主题

TA的得分主题

发表于 2009-1-19 11:03 | 显示全部楼层
谢谢楼主的精彩讲解,争取每天一课哦,最好加上截图。

TA的精华主题

TA的得分主题

发表于 2009-1-19 11:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 yagi2008 于 2009-1-19 10:09 发表
  “同学们好!”,“老——师——好——”,“请坐下,把书翻到25页,今天我们讲......”,才三岁的儿子已经开始模仿和憧憬着学校的生活了~~哈哈,当我们回忆起儿时上课的情景,亲切吧?那就让我们重温一下这份感 ...


感谢楼主热情的讲解及乐于助人的精神!这样的论坛就是靠这样的精神支撑起来的!
我从一个初学者的角度向楼主建议:每次的内容以一个生动的事例为核心,重点讲解相关的知识点。这样内容会更吸引人,也会有更好的收获!当前的方式过于“专业化”!楼主以为如何?

TA的精华主题

TA的得分主题

发表于 2009-1-19 11:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
太好了
只是希望楼主有空可以多写点~~~

TA的精华主题

TA的得分主题

发表于 2009-1-19 11:30 | 显示全部楼层
这个,没啥子好说的....收藏,天天来学习!!!!!!!!!!!!!!!!!!!!!!!!!

TA的精华主题

TA的得分主题

发表于 2009-1-19 17:33 | 显示全部楼层

怎么没有继续写啦?

非常渴求能整理出来,形成一个完成的文件供下载

TA的精华主题

TA的得分主题

发表于 2009-1-20 00:37 | 显示全部楼层
谢谢楼主的精彩讲解,争取每天一课哦,最好加上截图。例句加注释或意途

TA的精华主题

TA的得分主题

发表于 2009-1-20 08:38 | 显示全部楼层

TA的精华主题

TA的得分主题

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

【2009.1.20】代码起步——关键字(续)

原帖由 fdd 于 2009-1-19 11:04 发表


感谢楼主热情的讲解及乐于助人的精神!这样的论坛就是靠这样的精神支撑起来的!
我从一个初学者的角度向楼主建议:每次的内容以一个生动的事例为核心,重点讲解相关的知识点。这样内容会更吸引人,也会有更好的 ...


  大伙的热情支持,真的让我很感动,提出的很多建议对我也非常有启发,今后的帖子里将会不断吸收各位的好的意见和建议,尽我所能把这篇入门指南写好。
  什么今天讲?不,今天讲什么?哎太过激动以至于有点语无伦次了。对了,今天先说说框架类关键字。列举如下:
  【框架类关键字】
  工程(Project): 是指用于创建一个应用程序的文件的集合。
  对象(Object): 可控制的某个东西,例如窗体和控件。
  窗体(Form):  应用程序的用户界面。  
  控件(Control): 指的是各种按钮、标签、文本框等。
  属性(Property):是指对象的特征,如大小、标题或颜色。
  工作表(Worksheet):指EXCEL文件里的工作表,例如sheet1、sheet2等。
  模块(Module):指在VBA工程中存放独立于用户定义对象代码的容器。
  过程(Sub):容纳和组织代码的限定符号,一般和End Sub联用,不返回结果。
  函数(Function):容纳和组织代码的限定符号,一般和End Function联用,并返回结果。
  
  记得我在学写程序的时候(那是很久很久以前的事情了),我最怕的就是看到这些E文字母。我经常去看HELP里面的例子,然而那里面居然连变量和过程的名字都是很长的E文。没办法,谁叫人家微软是美国公司呢!(记得之前有过几个用中文写程序的编辑器,甚至还热过一阵某语言,但随着时间的流逝,好像现在也不知去向了......)那么怎么样才能记住这些又长又难记的单词呢?不用记,你如果用VBA编程,你会发现只要你输入了正确的第一个关键字之后,可以通过支持VBA语言的编辑器自动提示输入接下来的单词,是不是很简单啊~其实多使用几次,你也就记住了。还有一个可以判断是否输入正确的方法,就是你总是用小写字母书写关键字,如果正确,编辑器会自动修正你录入的关键字的第一个字母为大写。
  Project,中文翻译为工程、项目等。这个关键字在VBA中表示一个工作簿所关联的代码的总容器。所有和这个工作簿(XLS文件)关联的代码,都装在这个容器里。但这个容器不仅仅装代码,还能装好多东西,比如工作表、模块、过程、函数等。那么这个容器是不是一个对象呢?请大家结合前面的讲解思考下这个问题?答案是肯定的。(如果你答错了,请接着往下看;否则请跳过下一段。)
  Object,对象,实体。在VBA中,工程、窗体、控件、工作表、模块等无一不是对象,因为这些都是实体,具备了独立存在的所有条件。比如,我问你书是对象嘛?是,因为书可以独立存在。那么颜色是对象嘛?不是,因为你无法单单拿出来一个叫“颜色”的东西,它只能作为其他东西的一种属性而存在。同样,工程,在VBA中是独立存在的,可以作为对象来看待。窗体、控件、工作表、模块也是一样。还有个小提示给大家,大家以后看到代码中某个对象名称后面跟了个S,在E文里应该表示复数,即多于一个的意思。那么在VBA中表示什么意思呢?表示多个对象放在一起,我们给它们一个名字叫“集合”。集合是对象嘛?不是,是多个对象放在一起。这个千万要注意,因为中文是没有复数的表示方法的,所以不能理解为“一个人是人嘛?是;一群人是人嘛?当然是!”,那就错了,在VBA里“一群人”不是人,是人的集合!那么你可能又会将集合同我们之前讲的“类”搞在一起了,类是对象的抽象,还拿书做例子,一本实实在在的书是一个对象,它可能是文学书,也可能是计算机书,当然可能是红色的,也可能是绿色的。而如果你脱离了具体的书而说“书”的概念,那么这时就指书这个类了。一个典型的例子是来自于生物界的分类。比如某只麻雀和某只鸽子,都是具体对象,而麻雀和鸽子都可以作为独立的一类鸟这个概念来描述,这时应该说成是麻雀类和鸽子类,同时它们又都属于鸟类这个概念,所以在类这个东西里,是可以分很多层次的,但除非具体到某一只鸟,不然就都是类的概念,而不是对象。集合呢?一群麻雀或者一群鸽子,就是集合,因为它们是由具体的很多只麻雀或鸽子组成的。干嘛费那么大劲说这些概念呢?可能你听得都快睡着了。但我还是要说,因为如果你不弄清楚类、对象和集合等概念,那么在以后写代码的时候,你就会犯糊涂,“怎么我写了一个‘对象’,就是不能用它的某个属性或方法呢?”,其实,很有可能你把对象写成了类或集合,因为他们就差一点点。(比如Row可以作为一个类,也可以作为一个对象,就看你如何声明它,同时,Rows就是一个集合)。
  我还要讲一下如何使用类、对象和集合。类一般在声明部分使用,比如DIM A As Range,这里Range就表示“行”这个“范围”类,而A被声明为属于“行”这个类的类型的变量,换句话说,A在经过这样的声明以后,就可以用来引用某个具体的行对象了。比如Set A = Sheet1.rows(1)。那么这时,A就可以代表第一行这个对象了。这里的ROWS代表Sheet1的所有行对象的集合。一般集合有一个属性,叫做COUNT,表示在这个集合中的对象的个数。同时,要用集合表示具体对象时,要在集合名称后加上一对括号,里面填写对象的索引值或名称。
  Form,窗体。你一般在Windows里运行的程序,都具备可视化的功能。那么这就是Form的功劳。通过引用FORM对象,你可以对这个工程里的一些窗体进行属性的设置、事件的定义以及运行某些方法。
  Control,控件。 指的是各种按钮、标签、文本框等。它们可以装饰你的窗体,并在窗体中提供用户各种功能。从某种意义上讲,窗体也可以看做是控件的容器。
  Worksheet,工作表。指EXCEL文件里的工作表,例如sheet1、sheet2等。通过引用这个对象,可以对工作表以及下级对象的属性进行设置、事件进行定义、方法进行执行。
  Module,模块。指在VBA工程中存放独立于用户定义对象代码的容器。如果你想定义一些变量、过程或函数,并且想在各个对象(比如Sheet1、Sheet2等)中都能使用,并且可以互相传递值。那么就应该将这些声明或代码写在模块中。详细的以后用到再详述。
  以上讲的都是对象,请大家参考对象的用法,具体操作一下如何声明、如何引用它们。至于如何通过对象设置属性、定义事件和执行方法,我们在具体讲解各类对象的时候再详细阐述。
  Sub,过程。容纳和组织代码的限定符号,一般和End Sub联用,不返回结果。Function,函数。容纳和组织代码的限定符号,一般和End Function联用,并返回结果。这两个概念,本来应该在代码里讲的,这里只是提示一下。大家只要明白一个概念,除声明语句外其他代码都应该放在这两种容器内。
  Property,属性。是指对象的特征,如大小、标题或颜色。最后讲讲这个。还记得上面讲到的对象的声明和引用的例子吗?刚讲过,应该不会忘吧,否则应该回头重新看下这篇文章了。现在,A已经被声明为一个Range类对象,并且已经赋予A引用为Sheet1的第一行了。那么如果想对Sheet1表的第一行设置为值都等于0,应该如何做呢?其实只要对Range类对象的一个Value属性设置一下就可以了,即:A.value=0。把上面所有的代码都放在Sheet1的一个叫“Worksheet_SelectionChange”的事件中,然后随便用鼠标点一个单元格试一下,是不是第一行的所有单元格都是0?恭喜你,写出了第一个完整的程序!不仅如此,你还可以在设置属性的语句后面,再写一句“A.Select”,这个是什么意思?先运行下试试(别忘记先保存)。是不是在将第一行都赋值为0以后,又把第一行都选中了?这里执行了Range类对象的一个叫“Select”的方法,作用是选中对象。回过头来想想,事件是什么?看下这个事件的名称吧:Worksheet_SelectionChange,翻译过来就是“工作表的选中项目发生改变”,也就是说只要该工作表(Sheet1)中的选中位置发生了变化,那么这个事件就会被触发,其中的代码就会被自动执行。现在明白什么叫“事件触发机制”了吧?换了以前基于过程的编程方法,那么必须规定啥时候这个单元格会被选中,而用户必须在这个规定的时候选中这个单元格,而现在有了事件触发机制,随便什么时候,只要满足事件触发的条件,这个动作就会被执行。
  今天讲的所有的代码总结如下,你可以直接把它们复制粘贴到Sheet1的代码集中:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)           '声明一个Worksheet_SelectionChange事件的私有过程
    Dim A As Range                                                                                      '声明一个变量A,并制定为Range类型
    Set A = Sheet1.Rows(1)                                                                          '将A赋值为(引用)Sheet1工作表的第一行
    A.Value = 0                                                                                             '设置A变量(表示Sheet1工作表的第一行)的Value属性值为0
    A.Select                                                                                                   '执行A变量的Select方法
End Sub                                                                                                       '事件过程结束标志
  具体示例程序见下面的附件。(打开EXCEL表格后,可以通过按“【ALT】+【F11】”的方法打开代码编辑窗口,并通过双击左侧Sheet1工作表的方法打开该工作表下的代码集)。
例1.rar (5.65 KB, 下载次数: 7661)
  明天继续。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-1-20 13:27 | 显示全部楼层
这样的讲解很精彩,好了,请楼主继续讲下去。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 07:12 , Processed in 0.046393 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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