ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

佛山小老鼠说Excel VBA

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-11-3 00:25 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:开发帮助和教程
本帖最后由 佛山小老鼠 于 2019-1-9 17:45 编辑

    佛山小老鼠说Excel VBA
前言
1 为什么要学VBA?
随着你的Excel水平不断的提高,以前你不会函数,现在会函数了,相信大家尝试到函数的甜头,可以批量操作一些数据,如,从文本里提取数字,按条件求和,自动生成工资条,考勤表,查询表,输入一个人的身份证号码,会自动填好“出生地”,“出生年月日”,“年龄”,“性别”等等,一谈起函数大家都会“不亦乐乎”。“津津乐道”,“和函数相见恨晚”,说实在话,我当时也是一种这样的心态,我学会的第一个函数if,当时高兴地睡不着觉。因为它可以判断“不及格,及格,良好,优秀”,感觉到这个函数太神奇了。对工作太有用了,于是我下定决心一定要把函数学好,当然中间也产生过“放弃”的念头。为什么呢?因为每一个函数的参数都是长长的,不认识的英文单词,然后又有一些朋友叫我查看Excel自带的“帮助”文件。极少一部分看“帮助”文件还是可以看懂的,大多数根本看“帮助”文件看不懂,发现自带的“帮助”是便于有一定基础的使用者查找和学习某个知识点,而对于新手来说,也像“侠客行”里的“石破天”看不懂石壁上的蝌蚪文,不能明白其意思。呵呵,一扯又扯远了,还是回到主题上来。当我们的函数学到了一定的水平时,可是,还是发现有一些问题不能解决。如果要解决用的函数特别复杂且很公式很长,有的根本用函数不能解决了。如一个单元格又有文字,又有数字,且数字出现的位置没有规律,且不只一次出现。要求把数字提取出来。又如提取工作薄里的各工作表名来制作目录。当然我们可以用函数实现,但是特别麻烦。又如,把多作工作簿汇总到一个工作簿里一个工作表时,方便我们汇总,现有的Excel功能无法批量操作,只能一个一个的,通过复制粘贴来完成。如果我们会VBA 你又到了Ecel里的另一个天地了。开个玩笑,Excel VBA,就像“九阴真经”里的第九层,也就是说,你会了Excel的VBA,那么你就可以随心所欲驾驭Excel表格,别人要三天才能完成的报表,你只要半天,甚至更短的时间完成,这样大大可以提高你的工作效率,上班时,别人上班时忙来忙去,你倒是很轻松。
2 VBA的作用
2.1 完成Excel现有功能不能实现的功能                                
2.2 使重复的工作不再重复
2.3 自定义函数(方便不会用函数的朋友)
2.4  实现“人机对话”(通过弹出一些窗体和对话框)
2.5 自定义Excel选项卡(制作出适合自己的工作界面选项卡和功能)
2.6 开发一些小程序(如“进销存”)
3 学VBA的基础
3.1 要有一点函数基础,和会Excel基础操作。建议中高级用户和在职办公人员学习VBA
3.2  学VBA需要很好的英文基础吗?
答案是否定,学习Excel里的VBA和英文基础没有什么必然联系,因为Excel里的VBA那些关键字什么的都是最基础的英语单词,只要你上过初中,大部分还都能认识,再者他们还都是固定的,你就是不认识,硬记下来也足够了,Excel里的VBA又不是让你用英语写文章,也不是让你通读英语文章!
该贴已经同步到 佛山小老鼠的微博


问题咨询加我微信18664243619   

佛山小老鼠说VBA.part1.rar

1.81 MB, 下载次数: 47067

佛山小老鼠说VBA.part5.rar

439.18 KB, 下载次数: 18531

佛山小老鼠说VBA.part4.rar

1.81 MB, 下载次数: 32269

佛山小老鼠说VBA.part3.rar

1.81 MB, 下载次数: 33278

佛山小老鼠说VBA.part2.rar

1.81 MB, 下载次数: 32424

评分

95

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-3 00:29 | 显示全部楼层
本帖最后由 佛山小老鼠 于 2012-11-4 10:07 编辑

目录
第一讲VBA介绍和VBE编辑环境
第二讲 录制宏 指定宏 运行宏 修改宏 保存宏 加载宏
第三讲 VBA 语法基础
第四讲 单元格对象
第五讲 VBA语句
第六讲 代码调试和错误处理
第七讲 工作表对象
第八讲 工作簿对象
第九讲 事件
第十讲 窗体与控件
第十一讲 用窗体与控件实例——开发隐藏工作表工具
第十二讲自定义函数
第十三讲 VBA数组基础(一)
第十四讲 VBA数组实例应用(二)
第十五讲 字典基础知识(一)
第十六讲 字典实例应用(二)
第十七讲 自定义右键菜单
第十八讲 自定义选项卡.

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-3 00:31 | 显示全部楼层
本帖最后由 佛山小老鼠 于 2012-11-8 10:30 编辑

第一讲VBA介绍和VBE编辑环境
为什么要学VBA?
1          提高工作效率,在我们Excel办公中,许多工作是重复的,我们可以通过录制宏把那些动作录制下来。下一次做时就不要重复做了,只要点一下一个按钮,就帮我们完成了。
2          现有功能很难实现或者实现要分许多步骤且比较复杂,方便一些新手操作和普通用户操作。
3          实现一些适合自己工作的一些特殊功能,因为每一个人,每一个行业存在的不同需求,而微软公司不能面面俱到,有时要通过我们自己用VBA来实现。
4          可以定制个性化的选项卡和命令,实现方便自己工作的操作的窗口界面
5          开发一些小程序
VBA介绍
6          VBA是VB的一个分支,是一门简单易用的编程语言,说的通俗一点就是由一些代码和语句按照一定的逻辑组成,能实现一些功能和作用的代码
VBE窗口介绍
7          VBA窗口
7.1.1  用快捷键(Alt+F11),打开就可以看到(图 1)的界面,这个就是VBE窗口界面,和2003版本的没有变化,还是一样的。
1.jpg
1
7.2         图1的上面是菜单栏和工具栏,和平常的2003版本的Excel菜单栏和有工具栏一样,
7.3         图1的左边是“工程资源管理器”和属性窗口
7.4         图1的右下边是“立即窗口”
7.5         立即窗口的作用,便于快速验证VBA语句,在立即窗口中输入msgbox "我在学习VBA" 然后按一下回车键,就会弹出一个提示框。
7.5.1  用双击“工程资源管理器”里的Sheet1(Sheet1),就可以看到如(图 2)所示的
2.jpg
就可以看到对象列标表框和过程列标框,白色的区域那一块就是我们要写代码的区域。
2
8          添加模块,窗体,类模块(打开VBE窗口是没有这个三个模块的,只有对象模块)
8.1         插入菜单,模块(有的也叫做标准模块)
8.2         插入菜单,类模块
8.3         插入菜单,窗体
9          删除模块,窗体,类模块
9.1         如果想不要模块,窗体,类模块,把光标对准相应的模块右击,移除模块。
10      对象浏览器窗口,视图菜单,对象浏览器(也可以按快捷F2)可以帮我们找到对象的属性,方法,事件的一些用法。
11      设置VBE的编辑环境,为了便于自己编写和查看,调试代码,要对VBE编辑窗口一些设置进勾选,选择适合自己的的选项。如(图 3)
3.jpg
3
11.1     字号大小:工具菜单,选项,编辑器格式,大小(S),如(图 4),一般我们设置为11磅
4.jpg
4
11.2     自动弹出成员列表:自动弹出成员列这个功能对于初学者和老用户来说都是非常有用,因为我们刚学的时候,特别是英文基础差一点的学生来说,可以给大家很大的帮助。举个例子,工具菜单,选项,编辑器,勾起“自动列出成员(L)”,然后在任何代码窗口中输入“Sheets加上一个点号”,就会弹出如(图 5)所以的成员列表,绿色图标的是方法,有一个手形的图标是属性
5.jpg
5
11.3     要求声明变量:举个例子,工具菜单,选项,编辑器,勾起“要求变量声明(R)”,然后新建一个标准模块,就会在新建标准模块的最顶端会自动添加Option Explicit然后在标准模块里输入,按F5执行代码,就会弹出(图 6)这样的提醒,如果我们把Option Explicit这一句删除,再按F5执行代码就不会弹出(图 6)这样的提醒
6.jpg

  1. Sub test()
  2.     Set MyRg = Range("A1")
  3.     MsgBox MyRg
  4. End Sub
复制代码

6
11.4     自动显示数据提示:举个例子,工具菜单,选项,编辑器,勾起“自动显示数据提示(S)”,然后新建一个标准模块,输入以下代码

  1. Sub test()
  2.     Set MyRg = Range("A1")
  3.     MsgBox MyRg
  4.     Set MyRg = Nothing
  5. End Sub
复制代码

主要是便于代码逐步或者设置断点调试,想知道变量的值时,这时把光标移到变量上,就会弹出一个提示如(图 7)所示
7.jpg
7
12      运行过程,中断,重新设置,在工具栏上用方框框起来的三个按钮分别表为“运行子过程/用户窗体”;“中断”;“重新设置”。如(图 8)
8.jpg
8
12.1     运行过程分为全过程运行(快捷键F5)和逐步运行(快捷F8)
12.2     重新设置,当逐步运行时,想取消逐步运行,按一下“重新设置”这个按钮。
13      中断:相当于按了一下Esc,当一个过程运行进入了死循环,这时可以按一下Esc

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-3 00:46 | 显示全部楼层
本帖最后由 佛山小老鼠 于 2012-11-8 10:31 编辑

第二讲 录制宏 指定宏 运行宏修改宏 保存宏 加载宏
一、录制宏
1、    显示“开发工具”选项卡方法:Office按钮——>>Excel选项——>>常用——>>在功能区显示“开发工具”选项卡
2、    录制在A1单元格输入“培训”这样一个宏
3、    录制方法 “开发工具”选项卡——>>代码组——>>录制宏——>>弹出一个“录制新宏”对话框——>>输入宏名为“输入”——>> 确定——>> 选中A1单元格——>> 输入“培训”——>单击一下编辑栏的勾——>>停止录制
二、查看宏
1、    方法一 在上一节课我们已知知道了,相信大家没有忘记那个快捷键,如果忘记了,我就晕了。Alt+F11,双击模块1——>>便可以看到刚才录制的代码
2、    方法二  “开发工具”选项卡——>>代码组——>>单击一下Visual Basic按钮——>>双击模块1——>>看到以下代码

  1. Sub 输入()
  2. '
  3. ' 输入 Macro
  4. '

  5. '
  6.     Range("A1").Select
  7.     ActiveCell.FormulaR1C1 = "培训"
  8. End Sub
复制代码

三、指定宏
1、    方法一 “开发工具”选项卡——>>控件组——>>插入——>>表单控件——>>单击一下“按钮”——>>按住左键不放,在工作表里拖拉一下——>>画完后,弹出一个对话框,指定宏——>>选中“输入”——>>确定
2、    其它方法 也可以把宏指定给其它对象,如“自选图形”里的圆,艺术字
                            A、    打开比方,指定给艺术字的方法 把光标定位到你要指定的艺术字——>>右击——>>指定宏——>>弹出“指定宏”对话框——>>选中“输入”——>>确定
3、    修改“按钮”的名字 方法 把光标定位到按钮上——>>右击——>>编辑文字——>>修改为“输入”
四、运行宏
1、    方法一 我们先删除A1单元格里的内容——>>单击一下“输入”按钮
2、    方法二 “开发工具”选项卡——>>代码组——>>单击一下“宏”按钮——>>选中“输入”——>>单击一下“执行”
3、    其它方法 我们在上一节课讲过,在VBE编辑器里,把光标定位到你“输入”的宏过程任何一行代码里,运行F5,逐步运行F8
五、修改宏
1、    选中A1:D9单元格区域,录制一个给它添加边框的宏,录制的代码如下

  1. Sub 添加边框()
  2. '
  3. ' 添加边框 Macro
  4. '

  5. '
  6.     Selection.Borders(xlDiagonalDown).LineStyle = xlNone
  7.     Selection.Borders(xlDiagonalUp).LineStyle = xlNone
  8.     With Selection.Borders(xlEdgeLeft)
  9.         .LineStyle = xlContinuous
  10.         .ColorIndex = xlAutomatic
  11.         .TintAndShade = 0
  12.         .Weight = xlThin
  13.     End With
  14.     With Selection.Borders(xlEdgeTop)
  15.         .LineStyle = xlContinuous
  16.         .ColorIndex = xlAutomatic
  17.         .TintAndShade = 0
  18.         .Weight = xlThin
  19.     End With
  20.     With Selection.Borders(xlEdgeBottom)
  21.         .LineStyle = xlContinuous
  22.         .ColorIndex = xlAutomatic
  23.         .TintAndShade = 0
  24.         .Weight = xlThin
  25.     End With
  26.     With Selection.Borders(xlEdgeRight)
  27.         .LineStyle = xlContinuous
  28.         .ColorIndex = xlAutomatic
  29.         .TintAndShade = 0
  30.         .Weight = xlThin
  31.     End With
  32.     With Selection.Borders(xlInsideVertical)
  33.         .LineStyle = xlContinuous
  34.         .ColorIndex = xlAutomatic
  35.         .TintAndShade = 0
  36.         .Weight = xlThin
  37.     End With
  38.     With Selection.Borders(xlInsideHorizontal)
  39.         .LineStyle = xlContinuous
  40.         .ColorIndex = xlAutomatic
  41.         .TintAndShade = 0
  42.         .Weight = xlThin
  43.     End With
  44. End Sub
复制代码

2、    修改后的代码

  1. Sub 添加边框()
  2.     With Selection.Borders
  3.         .LineStyle = xlContinuous
  4.         .ColorIndex = xlAutomatic
  5.         .TintAndShade = 0
  6.         .Weight = xlThin
  7.     End With
  8. End Sub
复制代码

从上面的代码可以看出,录制宏会录制出许多多余的代码出来。因此要把它们去掉,绿色是注释也把删除,它是对上边框,下边框,左边框,右边框,中间横线,中间的竖线一个一个处理,因此用With Selection.Borders对所有的边框
六、保存宏
1、    保存带有宏的工作簿(xlsm)如图10
                            A、    当我们保存带有宏的工作簿时,会弹出一个这样的提示对话框如图9往往没有接触过宏的朋友会吓一跳的,其实我们把下面这个图里的字读一次,就明白了,原来要保存为“启用宏工作簿”这个是2003版有区别的,微软公司的目的就是让用户在未打开之前提醒用户这个是带有宏的工作簿
9.jpg
图 9
         10.jpg
图 10
七、保存为加载宏(xlam)如图11
1、    选择“Excel加载宏(*xlam)就会自动打开这个文件夹C:\Documents and Settings\Administrator\Application Data\Microsoft\AddIns,然后输入你的加载宏名
11.jpg
图 11
2、    加载宏的特点
                            A、    隐藏的
                            B、    一打Excel程序就会打开
3、    加载“加载宏”
                            A、    Office按钮——>>Excel选项——>>加载项——>>转到——>>加载项对话框——>>勾起“加载项名”前面的勾——>>确定
4、    删除加载宏
                            A、    2007删除加载宏比较麻烦,2010版的就改良这个,2010版直接在开始工具选项卡,有一个“加载项按钮”,那么2007怎么删除它呢?Office按钮——>>Excel选项——>>加载项——>>转到——>>加载项对话框——>>去掉“加载项名”前面的勾——>>确定
八、保存为个人宏工作簿:在我们录制宏时,有时我们可以选中“保存为个人宏工作簿”,便可以在所有的工作簿中用,不过有个缺点,会打开个人宏工作簿,所以建议大家用“加载宏”,保存“个人宏工作簿”是对VBA新手打造的。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-3 00:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 佛山小老鼠 于 2012-11-8 10:32 编辑

第三讲 VBA 语法基础
在学习VBA之前,我们要了解VBA里的对象,属性,方法,事件,就像我们在生活中一样,和一个人谈恋爱,是不是要相互了解对方,才能步入结婚的礼堂。下面来一一介绍它们
一、对象
1)       什么是对象呢?生活中的手机,电视机,桌子等等这些就是对象,而在我们的Excel里VBA 的对象是指什么呢?这个可能抽象一点。工作簿,工作表,艺术字,图片这些就是Excel里的对象
2)       实例
                     A.              Workbooks 代表工作簿集合,所有的工作簿,Workbooks(i),表示已打开的第i个工作簿
                     B.              Workbooks ("汇总表") 代表“汇总”工作簿
                     C.              ActiveWorkbook 当前正在操作的工作簿
                     D.              ThisWorkBook 代码所在的工作簿
                     E.              Sheets("汇总") 代表“汇总”工作表
                     F.              Sheet1表示第一个插入的工作表,Sheet2表示第二个插入的工作表.......
                     G.              Sheets(i) 表示按排列顺序,第i个工作表
                     H.              ActiveSheet 表示当前活动工作表
                     I.              Worksheet 也表示工作表,但不包括图表工作表、宏工作表等。
                     J.              Cells 所有单元格
                     K.              Range ("单元格地址")
                     L.              Cells(行数,列数)
                     M.              Activecell 当前选中的单元格
                     N.              Selection 被选中的单元格或者单元格区域
二、属性
1)       属性是指对象的特点,对象固有的,如图片就有图片高度,图片的宽度,单元格就有单元格的底纹,单元格字体的颜色,这些就是它们的的属性,打个比方,生活的一些东西,如“苹果”,苹果的形状,苹果的颜色,苹果的重量,这些就是苹果的属性。
2)       实例
                     A.              显示单元格A1相对引用的地址,而这个Address就是单元格Range的属性
Sub test()
    MsgBox Range("A1").Address(0, 0)
End Sub
                     B.              代码解释 属性中间一定要用点号分开,可能有的学生会问,怎么才有能知道它有那些属性呢?打个比方,我现在想知道工作表有那些属性,我们可以先输入Sheet1再加一下点号,就会自动弹出其相应的属性列表出来,就像我们的Excel2007版的函数一样,你输入一个字母,就会弹出以这个字母开头所有函数出来,这样大家也就不用去记这些属性具体这个英文单词怎么写,只要大概了解知道有个这样的属性就可以了
三、方法
1)       方法是作用对象的一些动作,工作表删除,工作表移动,单元格复制,这些删除,移动,复制就是相应对象的方法。打个比方,苹果被削了,削就是苹果的方法。
2)       实例
                     A.              在第一个工作表前面插入一个工作表

  1. Sub test()
  2.     Sheets.Add before:=Sheets(1)
  3. End Sub
复制代码

                     B.              代码解释 Sheets是指工作表类,也就是工作表对象,中间用一个点分开,Add就是方法了,然后再输入一个空格,before是对Add方法的一个补充说明,格式一定要这样,输入了Before之后,再输入一个冒号,接着输入一个等号,整个代码的意思,在第一个工作表前插入一个新的工作表。
四、事件
1)       事件在Excel VBA里是指一定条件下,触发过程,如双击左键,右击,改变单元格内容,选择不同的单元格就会触发一个过程就叫做事件,事件一般都是写在相应的工作表模块里
2)       实例
                     A.              双击就会弹出一个问候对话框

  1. Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  2.     MsgBox "你好"
  3. End Sub
复制代码

                     B.              代码解释:双击左键就会弹出一个问候对话框,Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean这个是自动生成的,你到工作表模块里,如双击Sheet1模块,通用列框里选择Worksheet,声明列表里选择BeforeDoubleClik,Msgbox是显示对话框函数。
五、变量
1)       什么是变量 变量是指在代码运行过程中其值能够发生变化的量,举个例子,Y=2*X,这是一个方程 ,当X=1时,Y=2,当X=2时,Y=4,当X=3时,Y=6, 这个X就是一个变量
2)       变量中不能使用的一些符号 #  *  % !,用的最多的是 _
3)       变量不区分大小写,也可以使用中文,但实际应用中很少用,我们用英文表示变量名一般也会采取一些特点,如文本型的变量用Str ,这样让人一看就这个变量表示文本型数据类型String
4)       为什么要声明变量
                     A.              如果数据量不大,在Excel里VBA不声明变量也没有影响的,但是,如果数据量很大时,不声明,程序的运行速度就会慢许多。
                     B.              打个比方,你打了一个电话给公交车公司你要租一辆车,但是你没有说你要租一辆多少人坐的车,那么出租车公司就会给你一辆坐100个人的车,而实际人你才要一个30人坐的车。大车的费用肯定比小车的费用贵,这样你不划算啊,变量也是这样,你不声明,它就给存储空间最大的个数据类型给你那个不声明的变量。
                     C.              再打个比方:小明的妈叫小明去菜市场去一斤打酱油,小明从家里拿了一个麻袋去,小明妈妈拉住小明了,说麻袋不能装酱油,会漏掉,于是小明提了了一个大水缺,在路上,小明摔了一跤,酱油也没有了,水缺也破了,小明真是陪了夫人又折兵,后来他妈妈告诉小明,下次你去打酱油就拿一个装一斤矿泉水瓶子去就可以了。呵呵,相信听了这个故事肯定笑了。也明白了为什么要声明定义变量。
5)       变量声明方式
                     A.              格式一  Dim 变量名 as 数据类型
Dim i as Integer
                     B.              格式二  dim 变量名 as 数据类型,变量名 as 数据类型 记得用用逗号分开
Dim I as Integer,Rg as Range,Str as String
6)       强制声明
                     A.              变明使用前声明是一个好习惯,但我们会忘记,怎么办呢
                     B.              方法一 Alt+F11——>>工具菜单——>>选项——>>编辑器选项卡中——>>勾起“要求变量声明”复选框 如图 12
12.jpg
12
                     C.              方法二 在代码模块顶端输入 Option Explicit
7)       声明变量的一种简写形式
                     A.              我们经常会看这样的一种定义变量的格式 Dim I% ,大家会问,这个是什么意思呢?,把变量I数据类型定义为整型。常见的有整型Integer用%  长整型Long用& 字符串String用$ 单精度浮点型Single用! 双精度浮点型Double用#
8)       变量的作用域
变量的生命周期,也就是变量什么时候销毁,释放内存,因为变量只是暂时的存在内存中的,根据这样把变量分为过程级变量,模块级变量,全局性变量,静态变量
                     A.              过程变量:定义变量是写在过程中的,其作用是在过程运行中,当过程结束变量也就销毁了。
1.       实例

  1. Sub test()
  2.     Dim i As String
  3.     i = "佛山小老鼠"
  4.     MsgBox i
  5. End Sub
复制代码

                     B.              模块级变量:定义变量写在模块的顶端,在此模块中可以调用此变量,其值还是存在,别的模块就不行了
1.       实例
   

  1. Dim Str As String
  2. Sub test1()
  3.     Str = "小老鼠"
  4.     MsgBox Str
  5.     Str = "佛山" & Str
  6. End Sub
  7. Sub test2()
  8.     MsgBox Str
  9.      Str = ""
  10. End Sub
复制代码

代码解释先运行Test1,然后运行Test2,大家可以看到对话框显示“佛山小老鼠”,也就是说运行过程Test2时,把过程Test1里的小老鼠也继承下来了。
                     C.              全局性变量 也是定义变量写在模块的顶端,不过就不是用Dim来定义了,要用Public,这个变量就在所有的模块都可以调用,也就是这个变量值一直存在,直到把Excel程序关闭,变量值才会销毁。
1.       实例
先插入两个模块,在模块1中输入以下代码

  1. Public Str As String
  2. Sub test1()
  3.     Str = "佛山小老鼠"
  4.     MsgBox Str
  5. End Sub
复制代码

在模块2中输入以下代码

  1. Sub test2()
  2.     MsgBox Str
  3. End Sub
复制代码

然后先运行模块1中的代码,然后再运行模块2中的代码,大家就会发现对话框中显示了“佛山小老鼠”,相信大家都明白了这个道量,另外全局性变量不能重复定义,重复定义就会报错。
9)       静态变量
静态变量定义静态变量是在写在过程中,用Static定义,结束后,变量值仍旧保留,但是大家要用和模级变量区分,模块级变量是值作用于此模块所有过程,而静态变量只值只作用于本过程,不作有于其它过程。
                     A.              实例

  1. Sub Test1()
  2. Static i As Integer
  3. MsgBox i
  4. i = i + 1
  5. End Sub
  6. Sub Test2()
  7.     MsgBox i
  8. End Sub
复制代码

代码解释:先运行Test1过程,显示i为0,再运行Test1过程为1,再运行Test1过程为2,再运行Test1过程为3,我们发现每运行一次结果会加1,因为我们有一个累加变量 i=i+1,其值还是保留,但当我们再行Test2时,可是那个i还是0,说明静态变量只作用于Test1,而不作用于Test2
六、常量
1)       常用申明用关键字Const,其值在过程运行中不会发现变化
2)       常量作用域
                     A.              和变量一样
                     B.              实例 计算圆面积

  1. Sub test1()    '过程开始
  2.     Dim S As Single '定义变量S为单精变浮点型,目的让其有保留二位小数,如果你定义Integer就没有小数点位数了
  3.     Const Pai = 3.14 '定义常量Pai
  4.     r = 2    '给r赋值为2
  5.     S = Pai * 2 ^ 2 '计算圆的面积公式
  6.     MsgBox "算出的圆的面积为:" & S '显示圆面积结果
  7. End Sub
复制代码

                     C.              代码截图如图 13
13.jpg
13

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-3 00:53 | 显示全部楼层
本帖最后由 佛山小老鼠 于 2012-11-8 10:35 编辑

第四讲 单元格对象
单元格和单元格区域是用户操作最多的一个对象,它可以表示一行,一列,一个区域,整个工作表,关键大家要理解它的引用方式
一、单元格的引用方式
1)       Range表示
                     A.              如表示A1单元格 Range ("A1")
                     B.              实例

  1. Sub Range表示()
  2.     Range("A1") = "佛山小老鼠"
  3. End Sub
复制代码

2)       Cells表示
                     A.              如表示D3单元格 Cells(3,4)
                     B.              实例

  1. Sub Cells表示()
  2.     Cells(3, 4) = "佛山小老鼠"
  3. End Sub
复制代码

3)       Activecell表示
                     A.              实例

  1. Sub ActiveCell表示()
  2.     ActiveCell = "佛山小老鼠"
  3. End Sub
复制代码

二、单元格区域的引用方式
                     A.              实例“表示单元格区域A1到D9的区域,有下面几种表法方法

  1. Sub test1()
  2.     Range("A1:D9") = 1
  3. End Sub
  4. Sub test2()
  5.     Range("A1", "D9") = 3
  6. End Sub
  7. Sub test3()
  8.     Range(Cells(1, 1), Cells(9, 4)) = 5
  9. End Sub
  10. Sub test4()
  11.     Range([A1], [D9]) = 6
  12. End Sub
  13.                      B.              其它方式引用单元格区域
  14. 1.       Selection
  15. 2.       UsedRange
  16. 3.       CurrentRegion
  17. 4.       Union
  18. 5.       Intersect
  19. 6.       Resize
  20. 它们的代码用法如下
  21. Sub test1()
  22.     Range("A1:D9") = 1
  23. End Sub
  24. Sub test2()
  25.     Range("A1", "D9") = 3
  26. End Sub
  27. Sub test3()
  28.     Range(Cells(1, 1), Cells(9, 4)) = 5
  29. End Sub
  30. Sub test4()
  31.     Range([A1], [D9]) = 6
  32. End Sub
  33. Sub test5()
  34.     Selection = 7
  35. End Sub
  36. Sub test6()
  37.     ActiveSheet.UsedRange = 8 '注意一定要在UsedRange前加父对象
  38. End Sub
  39. Sub test7()
  40.     Range("A1").CurrentRegion.Select '表示选中和A1单元格相连接的所有单元格,这个连接是指有数据的连接
  41. End Sub
  42. Sub test8()
  43.     Application.Union([A1], [C1], [E1], [G1]).Select '表示同时选中A1,C1,E1,G1单元格
  44. End Sub
  45. Sub test9()
  46. ' Intersect方法经常用到了,有时可能用户选择了整列,而这一列有数据的单元格不多,代码里用
  47. '了循环语句,如果不用Intersect这个来选择区域,运行程序时可能就出现Excel程序卡死
  48. Application.Intersect(ActiveSheet.UsedRange, Selection).Select
  49. End Sub
  50. Sub test10()
  51. 'Resize属性常用在数组转置,有时不确定区域有多大,就会用Resize来填充数据
  52. '格式:单元格对象.Resize(行数,列数)
  53. Range("D1").Resize(9, 2).Select '表示从D1单元格开始,向下总共有9行,当然包括D1在内,
  54. '向右总共二列,当然也包括D列在内,最后得列一个D1到E9的一个区域
  55. End Sub
  56. 三、行和列的引用方式
  57. 1)       用Range来表示行和列
  58. Sub test1()
  59.     Range("1:1").Select  '表示第一行被选中
  60. End Sub
  61. Sub test2()
  62.     Range("5:9").Select  '表示第5行到第9行被选中
  63. End Sub
  64. Sub test3()
  65.     Range("A:D").Select '表示A列到D列被选中
  66. End Sub
  67. Sub test7()
  68.     Range("D9").EntireRow.Select  '表示D9单元格所在的行,也就是第9行
  69. End Sub
  70. Sub test8()
  71.     Range("D9").EntireColumn.Select   '表示D9单元格所在的列,也就是第4列
  72. End Sub
  73. 2)       用Rows和Columns表示行和列
  74. Sub test4()
  75.     Rows("1").Select '可以不加双引号,也可以加双引号
  76. End Sub
  77. Sub test5()
  78. Rows("1:4").Select '表示1行到4行被选中,记得要加双引号
  79. End Sub
  80. Sub test6()
  81.     Dim i As Integer
  82.     i = 9
  83.     Rows("1:" & i).Select '表示1行到9行被选中
  84. End Sub
  85. Sub test9()
  86.     Rows.Select '表示工作表中所有的行被选中,也就是全选工作表
  87. End Sub
  88. Sub test10()
  89.     Columns.Select '表示工作表中所有的列被选中,也就是全选工作表
  90. End Sub
复制代码

四、用Offset属性来引用单元格
1)       单元格对象.Offset(偏移行数,偏移列数),备注:往左往上就是负数,往右往下就是正数
2)       实例

  1. Sub test()
  2.     Range("A1").Offset(0, 1).Select '单元格B1被选中
  3. End Sub
复制代码

五、定位单元格
1)       定位到A列最后一个有数据的单元格

  1. Sub MyRow()
  2.     i = Cells(Rows.Count, 1).End(xlUp).Row
  3.     MsgBox i
  4. End Sub
复制代码

2)       定位到第一行最后一个有数据的单元格

  1. Sub MyCol()
  2.     i = Cells(1, Columns.Count).End(xlToLeft).Column
  3.         MsgBox i
  4. End Sub
复制代码

评分

12

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-3 00:54 | 显示全部楼层
本帖最后由 佛山小老鼠 于 2012-11-8 10:37 编辑

第五讲 VBA语句
前面一讲我们学习了单元格的引用,这一讲我们来学习VBA里的语句,VBA里的语句有好多,下面把一些常用的讲一下
一、输入语句
1)       用Inputbox函数实现
                     A.              Inputbox函数有七个参数,主要我们理解前面三个参数,第一个参数是“提示语”第二参数是标题,第三参数是输入框中的默认值
                     B.              实例

  1. Sub test1() '这个程序有时会报错
  2.     Dim i As Single, S As Single
  3.     r = InputBox("请输入圆的半径", "圆半径", "空")
  4.     S = 3.14 * r ^ 2
  5.     MsgBox "圆的面积是:" & S
  6. End Sub
复制代码


  1. Sub test2() '这个程序是完善的,不会报错
  2.   Dim i As Single, S As Single
  3.     r = InputBox("请输入圆的半径", "圆半径", 0)
  4.     If r = "" Or StrPtr(r) = 0 Then Exit Sub
  5.     S = 3.14 * r ^ 2
  6.     MsgBox "圆的面积是:" & S
  7. End Sub
复制代码

2)       用InputBox方法实现
                     A.              InputBox方法有8个参数,主要我们理解前三个参数和最后一个参数,第一个参数是“提示语,第二参数是标题,第三参数是输入框中的默认值,第八参数是指返回的数据类型
                     B.              实例
'用InputBox方法实现
'用InputBox方法实现

  1. Sub test3() '这个程序是完善的,不会报错
  2.   Dim i As Single, S As Single '定义变量i,S为单精度型数据类型
  3.     r = InputBox("请输入圆的半径", "圆半径") '弹出输入对话框
  4.     If TypeName(r) = "Boolean" Or r = "" Then Exit Sub
  5.     '如果对话框点了取消或者点了关闭以及没有填数据就退出程序,
  6.     S = 3.14 * r ^ 2 '面积公式
  7.     MsgBox "圆的面积是:" & S
  8. End Sub
复制代码


  1. Sub test4() '这个程序有时会报错
  2.     Set rg = Application.InputBox("请选择你要查找的区域", "查找区域", Type:=8)
  3.     rg.Value = "老鼠"
  4. End Sub
复制代码


  1. Sub test5() '这个程序是完善的,不会报错,如果第八参数为8,那么用 On Error GoTo 100来防错了
  2.     Dim rg As Range '定义rg为单元格对象变量
  3.     On Error GoTo 100 '如果遇到错误,就跳到100那一行
  4.     Set rg = Application.InputBox("请选择你要查找的区域", "查找区域", Type:=8)
  5.    ' 把选中的区域赋值给rg
  6.     rg.Value = "老鼠" '给rg赋值为小老鼠
  7. 100:
  8. End Sub
复制代码

二、输出语句
1)       用函数Msgbox实现
                     A.              函数Msgbox有五个参数,主要理解第一个参数是“提示”,第二参数是“对话框的图标和按钮的数目和形式”,且用数字代替时,那些数字是可以相加了,第三参数是对话框的标题
                     B.              第二参数对照表
常数


描述

vbOKOnly

0

只显示 OK 按钮。

VbOKCancel

1

显示 OKCancel 按钮。

VbAbortRetryIgnore

2

显示 AbortRetryIgnore 按钮。

VbYesNoCancel

3

显示 YesNoCancel 按钮。

VbYesNo

4

显示 YesNo 按钮。

VbRetryCancel

5

显示 RetryCancel 按钮。

VbCritical

16

显示 Critical Message 图标。

VbQuestion

32

显示 Warning Query 图标。

VbExclamation

48

显示 Warning Message 图标。

VbInformation

64

显示 Information Message 图标。

                     C.              实例

  1. Sub test1()
  2.     MsgBox "你好", 64, "问候"
  3. End Sub
复制代码


  1. Sub test2()
  2.     MsgBox "你好", 64 + 4, "问候" '为什么加4呢、看一下第二参数的对照表就明白了,因为要两个按钮
  3. End Sub
复制代码


  1. Sub test3()
  2.     ant = MsgBox("你去过学校吗?", 64 + 4, "问候")
  3.     If ant = vbYes Then
  4.         MsgBox "我去过了"
  5.     Else
  6.         MsgBox "天下雨,我没有去"
  7.     End If
  8. End Sub
复制代码

三、With 语句
With语句的作用是精简代码,提高运行速度,如果我们多次读取对象影响运行的速度的。
1)       实例

  1. Sub test()
  2.     With Range("A1") '对A1单元格进行处理
  3.         .Font.ColorIndex = 3 '字体颜色为红色
  4.         .Interior.ColorIndex = 5 '底纹为蓝色
  5.         .Font.Size = 48 '字号为48
  6.         .Font.Name = "华文行楷" '字体为华文行楷"
  7.     End With '结束处理
  8. End Sub
复制代码


  1. Sub test1()
  2.     Range("A1").ClearFormats '清除A1格式
  3. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-3 00:55 | 显示全部楼层
本帖最后由 佛山小老鼠 于 2012-11-3 01:15 编辑

四、条件判断语句
条件判断语句在编写代码用的比较多,主要有
1)       if…then

  1. Sub test1()
  2.     If Range("F1") = "" Then MsgBox "F1单元格没有填好数据", 64, "温馨提示"
  3. End Sub
复制代码

2)       if…then…end if

  1. Sub test2()
  2.     If Range("F1") = "" Then
  3.         MsgBox "F1单元格没有填好数据", 64, "温馨提示"
  4.     End If
  5. End Sub
复制代码

3)       if…then…else…end if

  1. Sub test3()
  2.     If Range("F1") = "" Then
  3.          MsgBox "F1单元格没有填好数据", 64, "温馨提示"
  4.     Else
  5.         MsgBox "F1单元格的数据是:" & Range("F1").Value
  6.     End If
  7. End Sub
复制代码

4)       if…then…elseif…then…else…end if

  1. Sub test4() '只能判断一个
  2.     If Range("C3") < 60 Then '如果C3单元格小于60,那么
  3.         Range("D3") = "不及格" 'D3单元格显示不及格
  4.     ElseIf Range("C3") < 70 Then '又如果C3单元格小于70,那么
  5.         Range("D3") = "及格" 'D3单元格显示及格
  6.     ElseIf Range("C3") < 80 Then '又如果C3单元格小于80,那么
  7.         Range("D3") = "良好" 'D3单元格显示良好
  8.     Else '否则
  9.         Range("D3") = "优秀" 'D3单元格显示优秀
  10.     End If
  11. End Sub
复制代码

5)       select case…case…end select

  1. Sub test6() '这个程序当C3单元格大于100时,那么D3单元格没有显示了
  2.     Select Case Range("C3")
  3.         Case Is < 60
  4.             Range("D3") = "不及格"
  5.         Case Is < 70
  6.             Range("D3") = "及格"
  7.         Case Is < 80
  8.             Range("D3") = "良好"
  9.         Case Is <= 100
  10.             Range("D3") = "优秀"
  11.         End Select
  12. End Sub
复制代码

6)       select calse…case…case else…end select

  1. Sub test7() '这个程序就可以了,大于等于80以上的全部是优秀
  2.     Select Case Range("C3")
  3.         Case Is < 60
  4.             Range("D3") = "不及格"
  5.         Case Is < 70
  6.             Range("D3") = "及格"
  7.         Case Is < 80
  8.             Range("D3") = "良好"
  9.         Case Else
  10.             Range("D3") = "优秀"
  11.         End Select
  12. End Sub
复制代码


  1. Sub test8() '如果条件是区间时,如从几到几,就不能加Is了
  2.     Dim i As Integer
  3.     i = Weekday(Date)
  4.     Select Case i
  5.         Case 1 To 6
  6.             MsgBox "今天是工作日"
  7.         Case Else
  8.             MsgBox "今天休息"
  9.     End Select
  10. End Sub
复制代码

五、循环语句
1)       For…Next
                     A.              实例 在A1到A9单元格里依次输入1到9

  1. Sub test1()
  2.     Dim i As Byte '定义变量i为字节型
  3.     For i = 1 To 9 'i从1到9循环
  4.         Cells(i, 1) = i '从单元A1开始写于i
  5.     Next i '下一个
  6. End Sub
复制代码


  1. Sub test2()’这个是在A1到A9依次输入9到到1
  2.     Dim i As Integer, k As Integer  '定义变量i为字节型,注意如果从大到小,就不能定义i变量为字节型
  3.     k = 1
  4.     For i = 9 To 1 Step -1 'i从9到1循环
  5.         Cells(k, 1) = i '从单元A1开始写于i
  6.         k = k + 1
  7.     Next i '下一个
  8. End Sub
复制代码

2)       For Each…next
                     A.              实例在A1到A9,E3到E9,C3,C7单元格填充红色的底纹

  1. Sub test3()
  2.     Dim Rg As Range
  3.     For Each Rg In Range("A1:A9, E3:E9, C3,C7")
  4.         Rg.Interior.ColorIndex = 3
  5.     Next Rg
  6. End Sub
复制代码

3)       Do While…Loop
                     A.              实例 在A1到A9单元格里依次输入1到9

  1. Sub test4()
  2.     Dim i As Integer
  3.     i = 1
  4.     Do While i < 9
  5.         Cells(i, 1) = i
  6.         i = i + 1
  7.     Loop
  8. End Sub
复制代码


  1. Sub test5()’变形的
  2.     Dim i As Integer
  3.     i = 0
  4.     Do
  5.         Cells(i + 1, 1) = i + 1
  6.         i = i + 1
  7.     Loop While i < 9
  8. End Sub
复制代码

4)       Do Untile…Loop
                     A.              实例 在A1到A9单元格里依次输入1到9

  1. Sub test6()
  2.     Dim i As Integer
  3.     i = 1
  4.     Do Until i > 9
  5.         Cells(i, 1) = i
  6.         i = i + 1
  7.     Loop
  8. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-3 01:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 佛山小老鼠 于 2012-11-8 10:40 编辑

第六讲 代码调试和错误处理
当一个程序完成后,在编程员手上,能正常运行,但其实工作还有没有结束,特别是复杂的程序,因为这里也许里面还存在一些编程员没有发现的错误,所以当一个软件开发完之后,首先发布的版本是抢鲜版,如现在办公软件Office2013就是,有的是试用版,测试版,都是为了完善程序。一个学程序的人,都会经过这一步的,首先是代码正确,经过一段时间学习之后要保证不同环境和条件下的也能正常运行,也就是所谓的容错,还有就是兼容性,如Excel有2003版,2007版,2010版,程序能否在这个版本里都能正常运行。说了一大堆,其实我个人认为的有些程序调试的时间比写代码的时间还要长,可见这个过程的重要性。因此很有必要学习这一讲。
一、错误类型
1)       语法错误
                     A.              如函数Msgbox,如果把它的结果赋值给变量Ant,如果不给它的参数加一个括号就会出现红色的字

  1. Sub test1() '这个是正确的表示
  2.     MsgBox "0不能作为除数", 64, "提示"
  3. End Sub
复制代码


  1. Sub test2() '这个是错误的表示
  2.     ant = MsgBox"0不能作为除数", 64, "提示" '要给MsgBox里的参数括号括起来,才不会显示红色的字体
  3. End Sub
复制代码

2)       编译错误
                     A.              如定义变量,把关键字if定义为变量

  1. Sub test3()
  2.     Dim if AS Integer
  3. End Sub
复制代码

3)       运行错误
                     A.              因为数据类型Integer值的范围是-32768到32767之间的整数,而数据类型Long值的范围是-2147483648到2147483647,而我们的程序求和已经超出了32767,所以把变量S定义变量类型为Integer不行,要改为Long,所以当程序运行时,报错为“运行时错误,溢出”

  1. Sub test4() '这是错误的
  2.     Dim i As Integer, s As Integer
  3.     For i = 1 To 10000
  4.         s = s + i
  5.     Next i
  6.     MsgBox "最后结果是:" & s
  7. End Sub
复制代码


  1. Sub test5() '这是正确的
  2.     Dim i As Integer, s As Long
  3.     For i = 1 To 10000
  4.         s = s + i
  5.     Next i
  6.     MsgBox "最后结果是:" & s
  7. End Sub
复制代码

4)       逻辑错误
                     A.              实例 在第一个工作表前插入一张新的工作表,且取名为“总表”,第一次运行正常,但再运行一次时就报错了

  1. Sub test6() '第一次运行正常,再运行一次就报错了
  2.     Sheets.Add before:=Worksheets(1)
  3.         Worksheets(1).Name = "总表"
  4. End Sub
复制代码


  1. Sub test7() '这个不会报错
  2.     On Error Resume Next '为了防止在删除之前没有一个叫“总表”的工作表,因为没有我们怎么删除呢?
  3.     Application.DisplayAlerts = False '屏闭询问对话框
  4.         Sheets("总表").Delete '删除总表这个工作表
  5.     Application.DisplayAlerts = True '开启询问对话框
  6.     Sheets.Add before:=Worksheets(1) '在第一个工作表前面插入一个新的工作表
  7.     Worksheets(1).Name = "总表" '这个新的工作表取名为“总表”
  8. End Sub
复制代码

二、处理错误
1)       预防
比如,0不能作为除数,同样文本也不能作为除数,当单元格为空时,那么其值也算是0,你可能会说,那有那么傻,不可能用文本作为除数呢?有时会发生,所以我们在编程时就要自己先想到用户在操作时会发生什么情况,其实有时自己也没有发现,只有多次测试才能发现。

  1. Sub test9() ' 预防错误,防止了B2单元格没有数据和值是0时
  2.     If Range("B2") = "" Or Range("B2") = 0 Then MsgBox "B2单元格是空的或者它的值是0": Exit Sub
  3.     s = Range("A2") / Range("B2")
  4.     MsgBox "结果是: " & s
  5. End Sub
复制代码


  1. Sub test10() ' 预防错误,防止了B2单元格没有数据和值是0时,说不定一个用户会输入一个汉字放在B2单元格
  2. '那么怎么办呢,还要加上语句才行
  3.     Dim s As Single
  4.     If Range("B2") = "" Or Range("B2") = 0 Or Not Range("B2").Value Like "[0-9]" Then MsgBox "B2单元格是空的或者它的值是0或者是文本": Exit Sub
  5.     s = Range("A2") / Range("B2")
  6.     MsgBox "结果是: " & s
  7. End Sub
复制代码

也许你会说,曹老师,不要那么麻烦吧,用On Error Resume Next就解决了,不错,这就是我们下面要讲的忽略错误
2)       忽略错误

  1. Sub test11() ' 忽略错误,但是有一个缺点啊,它最后弹出一个对话框,但是没有值啊?怎么办呢,如果没有下面那个Msgbox函数就OK了
  2.     On Error Resume Next '遇到错误断续往下运行
  3.     s = Range("A2") / Range("B2")
  4.     MsgBox "结果是: " & s
  5. End Sub
复制代码

3)       引导错误

  1. Sub test12() ' 忽略错误,引导错误的
  2.     On Error GoTo 100: '遇到错误跳到100: 处,这样就绕过了Msgbox函数
  3.     s = Range("A2") / Range("B2")
  4.     MsgBox "结果是: " & s
  5. 100:
  6. End Sub
复制代码

三、代码调试
代码调试是一项繁琐的工作,我在编写“Excel完美工具箱”插件时,代码调试有时从晚上11点到早上三四点,长达4-5个小时的调试,当然在调试的时要修改一些代码,代码调试同时也提高自己编程水平,这个我深有体会,如设置断点,在本地窗口查看各变量的情况,然后找到原因在那,在第一讲时,我们简单提过一些,VBA编辑环境中,工作模式可分为三种,设计模式,也就是我们正常编辑代码时,运行模式,就是F5和F8运行时的状态,最后一种是中断模式,当程序遇到错误是程序会自动停止进入中断模式。设置断点,当程序运行到断点处,也会进入中断模式。下面我们讲几种调试的方法
1)       逐语句运行
                     A.              把光标定位到某一过程的任何一句里,然后按一下F8就会从第一句开始,有黄色颜色标示着第一行,再按一下F8,黄色颜色从第一行跑到了第二行。也就是每按一次F8就执行一行代码。此时我们就可以查看各变量的情况便于我们查找错误。但逐语句有时太慢了,特别是多层循环语句,我们可以到调试菜单,运行到光标处。当然也可以用“设置断点”下面我们讲解它
                     B.              设置断点
1.       设置断点的方法有
a)       直接在你要设置断点那一句代码左边边框处,单击一下左键,如图图 14
14.jpg
14
b)       11把光标定位到你要设置断点的那一行里,然后按一下F9就可以了
2.       清除断点的方法
a)       直接用左键单击代码边框处那红色圆点,就清除了那一行的断点
b)       如果设置断点多的化,调试菜单下的清除所有断点命令。
3.       设置断点后怎样运行代码
a)       把光标定位到过程中的某一行代码处按快捷F5,再按一下F5就运行到下一个断点。
4.       查看变量情况
a)       把光标移到变量就会显示变量的值,如15
    15.jpg
  图 15
b)       11在本地窗口查看各变量的情况,这种方法我经常用到,如图
16.jpg

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-3 01:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 佛山小老鼠 于 2012-11-8 10:42 编辑

第七讲 工作表对象
一.    工作表的引用
1.        以名称方式引用:Worksheets ("工作表名称"),Worksheets是工作表的集合,包括所有工作表。
(1)          实例

  1. Sub test1() '这是用名称来引用工作表名
  2.     Worksheets("总表").Range("A1") = "佛山小老鼠"
  3. End Sub
复制代码

2.        以索引号方式引用:Worksheets(数字)或者Sheets(数字),这两者的区别在前面的课程里提过,Sheets也是工作表的集合,把其它的工作表也包括在内,如图表工作表,宏表工作表。而Worksheets只包括我平常操作的工作表。如Sheet1,Sheet2
(1)          实例
   

  1. Sub test2() '这是用索引号来引用工作表名
  2.     On Error Resume Next '目的是为了防止此工作簿中没有“佛山小老鼠”这个工作表报错
  3.     Application.DisplayAlerts = False '屏闭询问对话框
  4.         Worksheets("佛山小老鼠").Delete '删除“佛山小老鼠”这个工作表
  5.     Application.DisplayAlerts = True '打开“询问对话框”
  6.     Sheets.Add After:=Worksheets(Sheets.Count) '在最后一张工作表后插入一张新工作表
  7.     Worksheets(Sheets.Count).Name = "佛山小老鼠" '把最后一张工作表改为“佛山小老鼠”
  8. End Sub
复制代码

3.        其它方式的引用
(1)          用ActiveSheet引用

  1. Sub test3() '用ActiveSheet引用
  2.     MsgBox "活动工作表的名字是:" & ActiveSheet.Name
  3. End Sub
复制代码

二.    添加工作表
1.        添加工作表的方法是Add,其表达式Add(Before/After,Count,Type)。Before前面,After后面,Count插入的数量,Type是插入的类型,如正常工作表Xlworksheet,图表工作表Xlchart,还有宏表工作表这里就不多说了。如果省略第二参,第三参数就会插入一张正常工作表
(1)          实例 在第一张工作表前面插入5张工作表
Sub test4() '在第一张工作表前面插入5张工作表
    Sheets.Add Before:=Worksheets(1), Count:=5
End Sub
三.    删除工作表
1.        按名称来删除 Worksheets(工作表名称).Delete 记得给工作表名加双引号
2.        按索引号来删除 Worksheets(数字).Delete  这个数字就是我们在工作簿看到工作表位置。
3.        用代码删除工作表,会弹出一个“询问对话框”如图 17
17.jpg
17
4.        解决询问对话框的问题
其实前面许多实例里我都用了,只是没有和大家说详细,这次和大家讲清楚,用了这下面的代码,Application.DisplayAlerts = False '屏闭询问对话框
        Worksheets(1).Delete '删除第一个工作表
Application.DisplayAlerts = True '打开“询问对话框”
5.        至少要保留一张可见工作表
6.        实例 删除第一个工作表

  1. Sub test1() '会弹出询问对话框的
  2.     Worksheets(1).Delete
  3. End Sub
  4. Sub test2() '不会弹出询问对话框的
  5.     Application.DisplayAlerts = False
  6.         Worksheets(1).Delete
  7.     Application.DisplayAlerts = True
  8. End Sub
复制代码

四.    实例 提取各工作表名制作目录

  1. Sub 提取工作表名()
  2.     Dim i As Integer '定义i为整型变量
  3.     On Error Resume Next '防止工作簿里没有目录工作表,在删除时报错
  4.     Application.DisplayAlerts = False '关闭询问对话框
  5.     Worksheets("目录").Delete '删除目录工作表
  6.     Application.DisplayAlerts = True '打开询问对话框
  7.     Sheets.Add before:=Sheets(1) '在第一个工作表前插入一张新的工作表
  8.     Sheets(1).Name = "目录" '把第一个工作表取名为“目录”
  9.     Cells(1, 1) = "目录" '在目录工作表中的A1单元写于“目录”两字
  10.     For i = 2 To Worksheets.Count 'Worksheets.Count统计工作的总数,整句代码的意思遍历每一个作表
  11.         Cells(i, 1) = Sheets(i).Name '依次把工作表的名字写A列
  12.     Next i '下一个i
  13. End Sub
复制代码


  1. Sub 清空()
  2.     Worksheets("目录").Columns("A").ClearContents
  3.      Worksheets("目录").Activate
  4. End Sub
复制代码

五.    实例 提取各工作表名制作目录且还要建立超链接

  1. Sub 提取工作表名()
  2.     Dim i As Integer '定义i为整型变量
  3.     On Error Resume Next '防止工作簿里没有目录工作表,在删除时报错
  4.     Application.DisplayAlerts = False '关闭询问对话框
  5.     Worksheets("目录").Delete '删除目录工作表
  6.     Application.DisplayAlerts = True '打开询问对话框
  7.     Sheets.Add before:=Sheets(1) '在第一个工作表前插入一张新的工作表
  8.     Sheets(1).Name = "目录" '把第一个工作表取名为"目录"
  9.     Cells(1, 1) = "目录" '在目录工作表中的A1单元写于"目录"两字
  10.     For i = 2 To Worksheets.Count 'Worksheets.Count统计工作的总数,整句代码的意思遍历每一个作表
  11.         Cells(i, 1) = Sheets(i).Name '依次把工作表的名字写A列
  12.         ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, 1), Address:="", _
  13.         SubAddress:=Worksheets(i).Name & "!A1", TextToDisplay:=Cells(i, 1).Value
  14.    '由代码过长,选打一个_然后加一个空格,这是把代码分行
  15.    ' 根据录制的代码修改,把选中的Selection改为Cells(i,1),把 "Sheet3!A1"改为Worksheets(i).Name & "!A1",一定要是记得是工作表名
  16.    '所以加了一个Name属性,把“佛山小老鼠”改为Cells(i, 1).Value
  17.     Next i '下一个i
  18. End Sub
  19. Sub 清空()
  20.     Worksheets("目录").Columns("A").ClearContents
  21.      Worksheets("目录").Activate
  22. End Sub
  23. '这是我们在A1单元格输入“佛山小老鼠”之后录制的一个给它添加超链接的宏得到的宏代码
  24. 'Sub Macro1()
  25. ''
  26. '' Macro1 Macro
  27. ''
  28. '
  29. ''
  30. '    ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
  31. '        "Sheet3!A1", TextToDisplay:="佛山小老鼠"
  32. 'End Sub
  33. 六.    实例 提取工作表制目录还要建立超链接还要添加一个“返回目录”的按钮
  34. Sub 提取工作表名()
  35.     Dim i As Integer '定义i为整型变量
  36.     On Error Resume Next '防止工作簿里没有目录工作表,在删除时报错
  37.     Application.DisplayAlerts = False '关闭询问对话框
  38.     Worksheets("目录").Delete '删除目录工作表
  39.     Application.DisplayAlerts = True '打开询问对话框
  40.     Sheets.Add before:=Sheets(1) '在第一个工作表前插入一张新的工作表
  41.     Sheets(1).Name = "目录" '把第一个工作表取名为"目录"
  42.     Cells(1, 1) = "目录" '在目录工作表中的A1单元写于"目录"两字
  43.     For i = 2 To Worksheets.Count 'Worksheets.Count统计工作表的总数,整句代码的意思遍历每一个作表
  44.         Worksheets(1).Activate '一定要加上这一句,由于我们为了添加按钮时,把添加按钮的那个工作表设置为活动工作表,添加之后还要把“目录”工作表设置为当前工作表
  45.         Cells(i, 1) = Sheets(i).Name '依次把工作表的名字写A列
  46.         ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, 1), Address:="", _
  47.         SubAddress:=Worksheets(i).Name & "!A1", TextToDisplay:=Cells(i, 1).Value
  48.    '由代码过长,选打一个_然后加一个空格,这是把代码分行
  49.    ' 根据录制的代码修改,把选中的Selection改为Cells(i,1),把 "Sheet3!A1"改为Worksheets(i).Name & "!A1",一定要是记得是工作表名
  50.    '所以加了一个Name属性,把“佛山小老鼠”改为Cells(i, 1).Value
  51.   ' 添加“返回目录”按钮
  52.    '因为2007录制不了艺术字代码,2003和2010可以,下面的代码是我在2003版里录制修改后的
  53.   Worksheets(i).Shapes.AddTextEffect(msoTextEffect32, "返回目录", "黑体", 16#, _
  54.         msoTrue, msoFalse, 600#, 20.25).Select
  55.         Sheets(i).Select
  56.     Sheets(i).Activate
  57. ActiveSheet.Hyperlinks.Add Anchor:=Selection.ShapeRange.Item(1), Address:= _
  58.         "", SubAddress:=Worksheets(1).Name & "!A1"
  59.    Range("A1").Select
  60.     Next i '下一个i
  61. End Sub
复制代码


  1. Sub 清空()
  2.     Dim Sp As Shape, sh As Worksheet
  3.     Worksheets("目录").Columns("A").Clear
  4.     For Each sh In Worksheets
  5.         sh.Activate
  6.         For Each Sp In ActiveSheet.Shapes
  7.             Sp.Delete
  8.         Next Sp
  9.     Next sh
  10. End Sub
复制代码

评分

14

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-13 14:34 , Processed in 0.060158 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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