白话Excel函数公式 Office易学宝微视频教程合集(Excel+Word+PPT)
笨办法学VBA(从入门到精通) 高效办公必会的Office实战技巧
财务总监的Excel私房课 Excel数据透视表实战秘技
Excel图表神技
查看: 2647|回复: 9

[VBA] 与VBA一起经历过的日子--写给V初的童鞋们

[复制链接]
发表于 2013-11-22 11:09:53 | 显示全部楼层 |阅读模式
写在前言的话:
这是我在11122班学习的一段时光,因为我水平有限,所以只是和大家一起分享下自己的学习经历。(写给V初的童鞋们)
为什么学习VBA呢?
根源在于:书店淘书的时候看到《别怕,EXCEL+VBA其实很简单》这本书,被里面幽默浅显的语句给迷上了。这本书是Kevin站长和叶枫编著的。当然,学习VBA的本质是为了更高效的工作。
回复

使用道具 举报

 楼主| 发表于 2013-11-22 11:10:29 | 显示全部楼层
本帖最后由 seki_100 于 2014-3-25 10:36 编辑

课时一VBA简介与VBE使用
VBA,全称Visual Basic For Application。更确切的讲,它是一种自动化语言,它可以使常用的程序自动化,可以创建自定义的解决方案。如果你愿意,还可以将Excel用做平台实现应用程序。
VBE,VisualBasic编辑器(Editor)的简称。
也许你想那个知道VBA可以干什么?
使用VBA可以实现功能包括
自动地完成重复性的工作任务;
组合菜单命令的功能,或者组合内置对话框中的功能,以完成所需的操作;
创建自定义工具栏,或者添加自定义菜单栏或菜单项,其中包含用户所创建的宏;
创建自定义函数,以简化公式或计算,或者为VBA过程提供返回值;
创建用户窗体,提示并引导用户正确地输入或选择数据;
利用Excel事件自动地完成相应的数据计算和分析;
创建自定义加载宏,以供他人使用或重复使用;
改善Excel的界面,以满足特定的要求和目的;
创建类,在不同的工程中共享代码;
与其他的应用程序交互,例如获取Access数据库中的数据到Excel中进行分析。
在学习第一课时应该理解的一些知识
“当前工作簿”、“新工作簿”、“个人宏工作簿”各代表什么意思?
当前工作簿--将录制的宏保存在活动工作簿中;
新工作簿----将录制的宏保存在一个新的空工作簿中;  
个人宏工作簿--将录制的宏保存在名为Personal.xls的特定文件中,启动Excel时会自动地装载该文件。
怎么把运算结果显示到立即窗口中。
Debug.Print
VBA代码可以存放在哪些地方?
工作表、模块、窗体、类模块
可以被所有模块调用的代码放在哪里?
模块
如何插入和删除模块?
插入模块方法1:插入-模块;方法2:工程窗口-右键-插入-模块
工程窗不显示了,怎么找出来?
视图-工程资源管理器
怎么批量把代码转换为注释文字?
选中,设置注释块
把注释文字改成深蓝色,步骤是什么?
工具—选项—编辑器格式—注释文本—前景色改为深蓝色
怎么样批量让代码缩进?
选中,缩进或TAB或者用代码Smart Indent美化工具
如何运行宏
F8单步、F5运行、CTRL+F8运行到光标所在行、CTRL+SHIFT+F8 跳出、SHIFT+F8 逐过程
在调试代码时,常用哪两个功能查看程序在截止某一行时运行状态和变量值。
设断点或代码程序中设STOP
想同时看到两个不同模块的代码,怎么做?
“窗口”菜单---“水平平铺”或“垂直平铺”
  
在哪个窗口更改“模块”的名称?
属性窗口
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-22 11:13:25 | 显示全部楼层
本帖最后由 seki_100 于 2014-3-25 10:39 编辑

课时二   录制宏和运行宏
这节课的内容较简单,学会使用宏录制器。
        宏安全级
        录制宏
        执行录制宏
单元格引用方式
绝对引用:运行VBA程序时,代码操作的单元格区域不会随着当前活动单元格的改变而改变;如希望录制的宏总是对固定的单元格区域进行操作,选择绝对引用方式。
       代码显示:range(“b1:b10”).select
相对引用:运行VBA程序时,代码操作的单元格区域会随着当前活动单元格的改变而改变。如希望录制的宏在工作表中任意区域执行,选择相对引用方式。
       代码显示:ActiveCell.Range("A1:B10").Select
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-22 11:13:59 | 显示全部楼层
本帖最后由 seki_100 于 2014-3-25 10:33 编辑

课时三  修改录制宏代码进行功能扩展
这节课最大的亮点就是如何对录制宏代码的简化和修改,经过简化和修改的代码可以提高代码运行速度,也使代码更加条理清晰和简洁,一目了然。
知识点一:宏命名原则
必须以字母或汉字开头,不能以数字或其他字符开头
必须由字母,数字,汉字或下划线(-)组成;
不能包括含句点(.),空格或者其他类型声明字符(如%,$,@,!,&);
最多不能超过 255 个字符;
不能不关键词同名
在同一过程内,必须是唯一的。
知识点二:代码常识
英文引号开头的代码被称为注释,一般是绿色。注释是由彔制宏时自动产生的信息,在运行时这些注释代码是不会被执行的。
在一些代码前面有小圆点出现,那些小圆点是代替WITH 后面的一些语句起到简化代码的效果
代码单词符合英文中的自然语言,如SHT.SELECT:对工作表 SHT 变量迚行选择
知识点三:For each……Next语句
用于在一个集合的所有对象或者一个数组的所有元素之间循环。VBA首先检测指定集合中的对象数量,然后对第一个对象执行语句,到Next关键字时,回到ForEach语句,检测对象的数量,然后循环。
举个例子
Sub TestForNumbers()
For Each myObject In MyCollection
If IsNumeric(myObject.Value) = False Then
MsgBox "Object contains a non-numeric value."
Exit For
End If
Next c
End Sub
知识点四:with……End With语句
当对单一对象或用户自定义类型要执行一系列语句时,可以用它简化代码,并可获得较高的执行速度。在代码前面有小圆点出现,它代替出现在With后面的词,起到简化代码的效果。
知识点五:Offset 属性
可用 Offset(row, column) (其中 row column 为行偏移量和列偏移量)返回相对于另一区域在指定偏移量处的区域。下例选定位于当前选定区域左上角单元格的下三行且右一列处的单元格。由于不能选定不在活动工作表上的单元格,故必须首先激活工作表。
Worksheets("sheet1").Activate Selection.Offset(3, 1).Range("A1").Select
知识点六:Union 方法
可用 Union(range1, range2, ...) 返回多块的区域,即该区域由两个或多个连续的单元格块所组成。下例创建由单元格区域“A1:B2”“C3:D4”组成的多块区域对象,然后选定该区域。
Dim r1 As Range, r2 As Range, myMultiAreaRange As Range
Worksheets("sheet1").Activate
Set r1 = Range("A1:B2")
Set r2 = Range("C3:D4")
Set myMultiAreaRange = Union(r1, r2)myMultiAreaRange.Select
使用包含若干区域块的选定区域时,Areas 属性很有用。它将一个多区域选定区分割为单个的 Range 对象,然后将这些对象作为一个集合返回。使用返回集合的 Count 属性可检测一个选定区是否包含多个区域,如下例所示。
Sub NoMultiAreaSelection()
numberOfSelectedAreas = Selection.Areas.Count
If numberOfSelectedAreas > 1 Then
MsgBox "You cannot carry out this command " & "on multi-area selections"
End If
End Sub
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-22 11:15:31 | 显示全部楼层
本帖最后由 seki_100 于 2014-3-25 10:42 编辑

课时四  Sub过程、判断与循环语句结构
VBA的过程主要包括“SUB过程”和“Function过程”两种(据说还有一种Property过程,但较少使用)。
Sub过程不可以返回值,Function过程可以返回值。Function过程的返回值可以是一个值或一个数组,就像我们的工作表函数,Function过程也就是我们说的自定义函数。
Sub过程
VBA录制的“宏”就是一个简单的Sub过程,使用录制宏功能只能生成sub过程的代码。
Sub过程的特点:1)以“sub过程名()”开头,以“EndSub”结尾;2Sub过程一般保存在模块里;3)不返回运行结果(不把程序运行的结果返回给过程名)。
声明Sub过程
         [Pubic|Private][Static]Sub过程名称([参数1,参数2…….])
                 [语句块
                 [Exit Sub]
                 [语句块
          End Sub
Function过程
                              
两个过程除了返回值不一样以外,其它的组成其实是一样的。虽然视频中并没有着重介绍Function过程,但在后面的学习中会发现,函数的返回值有时还是必要的。
过程调用方法
输入过程名称以及参数,参数用逗号隔开。过程名[,参数1,参数
在过程名称以及参数前使用Call关键字,参数用括号括起来,并用逗号隔开。
Call过程名[(参数1,参数
直接用Application.run运行
                Application.run “test” 其中testSub过程
过程名称还可以是字符串变量:
Dim a as string
a =“过程名
Application.run a
在过程中定义的变量 再次使用时 变量不需要加引号
注意:私有过程的名称是不会在工具宏名称,这个对话框中显示出来的。
条件判断语句
条件判断语句主要有以下五种:
IIF
IF…Then…
IF…Then…Else…EndIF
SelectCase… End Select
Choose
这次的视频中,主要讲到了第三种和第四种,我把这些条件判断语句都小结出来,也算自己学习一下。
1.IIF函数
IIF函数的基本语法是IIF(expr, truepart, falsepart)
举个例子  IIF([a1] >= 60, ”及格”, ”不及格”)
2.IF…Then…语句
IF…Then…句式的条件语句相比IIF函数在功能上强大很多,它的基本语法是
IF condition Then [Statements]
即如果满足条件则执行指定的语句或者一组语句。如果有多句代码则需要利用冒号进行连接。
3.IF…Then…Else…End IF
语法:
IF condition Then
                [statements]
[Else
                [elsestatements]
End IF
4.Select Case语句
举个例子,多条件判断时间,当然这里也可以用if then多层嵌套:
SubExcelVersion1()
    Dim MyVersion As String
    Select Case Application.Version
    Case "11.0"
        MyVersion = "2003"
    Case "12.0"
        MyVersion = "2007"
    Case "14.0"
        MyVersion = "2010"
    Case Else
        MyVersion = "未知版本"
    End Select
    MsgBox "Excel 的版本是: " & MyVersion& Chr(10) & Chr(13) & "当前用户是: " & Application.UserName
EndSub
循环语句
循环语句(又称控制结构),它可以重复执行一系列代码,从而批量地完成工作任务。循环语句在实际工作中应用极广,且因为循环语句不可能利用录制宏产生,所以必需潜心掌握它的语法和结构。
循环语句主要包括以下几类:
ForNext
ForEach Next
DoLoop
DoWhile Loop
For 循环语句
For– Next 循环语句
     For 循环变量=初值To终值[Step步长
     循环体
       [Exit For]
     循环体
Next[循环变量
注:步长是正数也可以是负数,但是不能为零,步长为正数的时候,循环变量的初体小于终值。负数的时候,循环变量的初值大于终值,缺省的情况下,步长为1
For Each-Next 循环语句
     For Each 元素变量In对象集合
         语句块
         [Exit For]
         语句块
Next[元素变量
Do While 循环语句
开头判断循环条件
  Do [While 循环条件
     循环体
         [Exit Do]
     循环体
Loop
结尾判断循环条件
    Do
   循环体
    [Exit For]
   循环体
Loop[While循环条件
第二种比第一种多执行循环部分的语句
回复 支持 反对

使用道具 举报

发表于 2013-12-7 14:22:32 | 显示全部楼层
谢谢楼主分享     对于初学者来说    看不懂
回复 支持 反对

使用道具 举报

发表于 2013-12-16 15:14:34 | 显示全部楼层
谢谢分享,楼主很用心了。
回复 支持 反对

使用道具 举报

发表于 2014-3-5 11:05:43 | 显示全部楼层
谢谢分享,学习了
回复 支持 反对

使用道具 举报

发表于 2014-3-25 10:04:28 | 显示全部楼层
谢谢分享,不过真的受教了。
回复 支持 反对

使用道具 举报

发表于 2014-10-9 15:37:23 | 显示全部楼层
Mark一下,楼主学习笔记很详细很认真
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 入学

本版积分规则

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