ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2009-2-1 15:06 | 显示全部楼层
本帖已被收录到知识树中,索引项:开发帮助和教程
楼主春节期间仍如此热心,向楼主致崇高敬意!!!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-2-1 21:57 | 显示全部楼层

【2009.2.1】代码起步——我的程序(续)

  上班第一天,好多店家还没开门,中午单位门前整个一条街啥吃的都没有,哎,第一天就吃方便面~~
  今天我们继续看一个程序,还记得昨天的程序吗?当你选择了某一行的单元格,系统会将当前选中单元格自动切换为该行的第一个单元格,这样可以了解该成绩是哪个学生的成绩。今天我们继续在昨天的EXCEL文件的基础上,实现一个新的功能,就是当按到某一个单元格时,除了自动切换选中单元格外,将本行内容通过一个对话框显示出来。
  EXCEL文件如下: 例1.rar (7.52 KB, 下载次数: 4288)
  代码如下:
  Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If (Target.Column <> 1) Then
      Cells(Target.Row, 1).Select
      MsgBox "姓名: " & Me.Cells(Target.Row, 1) & Chr(13) _
          & "语文: " & Me.Cells(Target.Row, 2) & Chr(13) _
          & "数学: " & Me.Cells(Target.Row, 3) & Chr(13) _
           & "英语: " & Me.Cells(Target.Row, 4) & Chr(13) _
           & "物理: " & Me.Cells(Target.Row, 5) & Chr(13) _
           & "化学: " & Me.Cells(Target.Row, 6) & Chr(13) _
           & "地理: " & Me.Cells(Target.Row, 7) & Chr(13) _
          & "历史: " & Me.Cells(Target.Row, 8) & Chr(13) _
           & "生物: " & Me.Cells(Target.Row, 9) & Chr(13) _
           & "体育: " & Me.Cells(Target.Row, 10) & Chr(13) _
          & "总分: " & Me.Cells(Target.Row, 11) & Chr(13) _
         , vbOKOnly, "提示"
  End If
  End Sub
  大家对比昨天的代码就会发现,今天就加了一句代码,即上述代码中用红色标出的部分,这个就是今天要讲解的内容。
  首先,我们看到这个代码使用了一条语句,Msgbox,这条语句的作用是调用一个消息对话框,这个语句带有三个参数,各个参数之间都用逗号分隔。
  其次,我们看到该语句的第一个参数就占据了好几行,那么大家可能会问,不是在上一讲中提到了VBA识别判断是否是一条语句就凭借换行符吗?那么像这样在多行中的语句为什么是属于同一条语句呢?这个主要是因为有时候语句太长,如果在一行写可能会导致格式混乱且不容易阅读和理解,所以我们就使用下划线(即:“_”)来将未写完的代码转到下一行继续写,并告诉系统,该语句在这行没有结束,下行还是属于该语句的内容。让我们仔细看看第一个参数的内容,总体上是一个字符串,该字符串由个部分构成,每个部分占据了一行,每个部分都是由工作表中的列标题字符串组成,“&”符号表示两个字符串之间的连接符,通过该符号,后面跟了一串代码,看起来也像个函数的样子(为什么说像函数呢?也为有函数名、括号和括号里的参数),对,这个是一个集合,其中的“me”表示引用本工作表,例如这里就是指Worksheet1工作表,“Cells”表示本工作表的所有单元格的集合,其中的参数表示行序号和列序号,这个在昨天的讲解中讲过。其实这里省略了一个部分,完整的应该是这样写“Me.Cells(Target.Row, 1).Value”,即这里返回的是指定单元格内的值,为啥省略呢?由于Value属性是Cells集合的默认属性,所以可以省略不写。最后,还跟了一个函数,即“Chr(13)”,这个函数的参数为一个整数值,作用是返回ASCII编码表中对应该整数值的字符或不可打印符号的。比如这里的13,在ASCII表中就对应了换行符,那么通过这个函数就返回了一个换行符,这样就可以让每个列标题的部分在对话框中占据一行的位置。
  然后,我们看到第二个参数比较简单,“vbOKOnly”,该参数是一个字符串常量,由系统内部定义,这里的这个值表示该对话框只有一个OK按钮,类似的可以放在这里的常量见下图:
1.jpg
该函数如果有返回值,则可能的返回值见下图:
2.jpg
为什么要用字符串常量替代该参数的数值类型的值呢?这样做主要是为了便于程序的阅读和程序代码的记忆。
  最后一个参数更简单,就是一个字符串,作用是定义该对话框的标题。
  大家运行下试试吧?!是不是很有趣?

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-2-1 22:36 | 显示全部楼层
哇,真是好帖,像我这样的VBA菜鸟还真期待楼主你吃饭吃快一点好回来写啊~

TA的精华主题

TA的得分主题

发表于 2009-2-1 22:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
好帖子。,。

TA的精华主题

TA的得分主题

发表于 2009-2-1 22:53 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-2-2 15:40 | 显示全部楼层
太精彩了,还没来得及看全,先顶一下再说!

TA的精华主题

TA的得分主题

发表于 2009-2-2 19:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼主加油啊

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-2-2 22:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

【2009.2.2】代码起步——我的程序(续)

  这两天陆续看到朋友们回复,有的说越来越难于理解了,有的说讲解得太快,快要跟不上了,还有的说前面的差不多都快忘完了......哈哈,告诉大家,有这个感觉是很正常的,看来我们有必要停下来解解惑了~~
  还记得这两天我们的代码吗?见下图:
1.jpg
  我们回头再来看看VBA代码到底是如何与前台的EXCEL工作表联系起来的。工作表在EXCEL里是一个独立的对象(还记得啥叫对象吗?),名字叫“Worksheet”,对象有很多属性、方法和事件,当然,还包括子对象集合,在这段代码里,我们用到了工作表的一个事件,即SelectionChange事件,这个事件的作用我们已经在上一讲谈过了,即当被选中的单元格发生变化的时候触发该事件并执行其中的代码。对于其他我不想多说了,今天我就想重点谈谈子对象及集合。在EXCEL里有很多对象,到底这些对象是如何组织起来的呢?请看下图:
excel对象模型图.gif
  从这张图里我们看到了很多对像,他们按照一定的级别有规律的被组织成树形排列。尽管在Excel的对象模型中包括了100多个对象,但你会发现最常用到的主要集中在如下五个对象上,Application、Workbook、Worksheet、Range、Chart,这并不是说用不着使用其他对象,只是说明这五个对象最为常用。
  Application对象代表Excel。使用Application对象可以控制应用程序级的设置、内置的Excel函数以及高级方法,例如InputBox方法。Workbook对象是指Excel中的工作簿,即是说Excel文件。在VBA环境中,不说打开一个文件,而称为打开一个工作簿;也不说保存一个文件,而称为保存工作簿。学习Excel时最先了解到的其中一点就是,Workbook中包括Worksheet。Worksheet是Workbook中独立的页,数据就保存在Worksheet中。Worksheet中包括单元格(Cell)。你也许会认为不得不编写大量的代码以对单元格对象进行控制,但是,实际上没有单元格这样的对象。有单元格属性,将在后面的学习中学到。相反,你将对范围(Range)对象进行处理。范围对象是指一个或者多个单元格。大多数Excel用户都使用Excel的图表功能,所以你经常需要处理图表(Chart)对象。用“图表向导”创建图表时所做的一切都可以通过VBA代码做到。
  那么什么是集合呢?集合就是多个对象组织在一起的一种引用方法。比如在一个工作簿Workbook对象中,就默认包含了三个Worksheet对象,那么在一起引用这三张工作表的时候就采用引用集合的方法来写代码,即Workbook.Worksheets,这里的Worksheets就代表了工作表的集合。集合在使用中有一个属性经常被用到,就是Count属性,这个属性的作用是返回该集合中对象的个数,比如你想知道一个工作簿中当前包含了几张工作表,就可以通过Workbook.Worksheets.Count来得到。集合还有一个用法就是如果需要单独引用其中的一个对象时,可以通过指定索引值或该对象名称来引用,例如需要引用工作簿中名称为“考试表”的一张工作表,默认索引为3,那么可以这样引用,即Workbook.Worksheets(3)或者Workbook.Worksheets(“考试表”),现在大家再看前面讲解的代码的时候是不是有了更清晰的理解呢?

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-2-2 22:52 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-2-3 01:44 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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