vba入门学习笔记1

    技术2022-05-11  12

      

     

       单位需要用到office编程,即用VBA进行办公室的自动化编程。从网上找到本评价不错的电子教程《excel vba 编程24学时教程》

    以下为笔记摘抄(http://download.csdn.net/source/1529085),及一些资料的查找.....

     

    =======================================================================   

    一.

     What is VBA??

       Excel vba 编程用到了两个工具,即MS OFFICE EXCEL Visual Basic for Application

     

       Vba(Visual Basic for Application)是一种自动化语言,可以用它使常用的过程或者进程自动化,可以创建自定义的解决方案,此外,如果你愿意,还可以将Excel用做开发平台实现应用程序。它是现在可用的易学习、易使用同时也是较复杂的应用程序自动化语言(过去常常称为宏语言)之一。

     

    Microsoft决定让它开发出来的应用程序共享一种通用的自动化语言—Visual Basic for ApplicationVBA),而不是使用不同的自动化语言。Visual BasicVBA结构上非常相似,我们可以认为Visual Basic for Application是非常流行的应用程序开发语言—Visual Basic子集。实际上,VBA是“寄生于”Visual Basic应用程序的版本。VBAVisual Basic的区别包括如下几个方面:

    * Visual Basic是设计用于创建标准的应用程序,而 VBA是用于使已有的应用程序自动化  * Visual Basic 具有自己的开发环境,而VBA必须“寄生于”已有的应用程序。  *要运行Visual Basic开发的应用程序,用户不用在他的系统上访问Visual Basic,因为Visual Basic开发出的应用程序是可执行的。而由于VBA应用程序是寄生性的,执行它们要求用户访问“父”应用程序,例如Excel

     

    VBA的功能有:

    * 使重复性的任务自动化。  * 自定义Excell中工具栏、菜单和窗体的界面。  * 简化模板的使用。  * Excell环境添加额外的功能。  * 创建报表。  * 对数据执行复杂的操作和分析。

     

     

     二.

       录制宏的处理

    是通过一次单击就可以应用的命令集。它们几乎可以自动完成您在程序中执行的任何操作,甚至还可以执行您认为不可能的任务。宏是编程,但即使您不是开发人员也可以使用它们,您甚至不需要知道任何编程知识。在 Office 程序中可以创建的多数宏都是用一种称为 Microsoft Visual Basic for Applications(通常称为 VBA)的语言编写的。VBA 宏就是本文要讨论的宏类型。

    在创建宏时可以指定快捷键,也可以创建完成后再指定。要在创建宏时指定快捷键,可在输入宏的名字后,在“快捷键”文本框中输入相应的键。录制完一个宏后,也可返回为宏指定快捷键。当包含宏的工作簿打开时,为宏指定的快捷键会覆盖Excel默认的快捷键。

    可将新建宏存放在三种可能的位置:  * 本工作簿。宏驻留在当前的工作簿中。这意味着只有当该工作簿打开时,该宏才可用。  * 新的工作簿。如果这样选择,会自动创建新的工作簿。  * 个人宏工作簿。为宏保留的一种特别的隐藏工作簿。第一次选择将宏保存到个人宏工作簿时,会创建名为PERSONAL.XLS的新文件。如果这个文件存在,当打开Excel时它会自动打开。因为个人宏工作簿始终打开,所以保存在其中的所有宏都是可用的。这意味着当创建可用于多

    个工作簿的通用的宏时,最好将它保存在个人宏工作簿中。

       可以把宏指定给图片或者工具栏按钮。

     

     

    .

         控件使用

    Excel开发过程的简要介绍:

     * 谁将使用这个应用程序?  * 应用程序将要使用的数据来源于何处?  * 应用程序保存什么样的数据?  * 应用程序对数据进行什么样的操作?  * 应用程序应当产生什么样的输出结果?  

       以向工作表或者用户窗体添加控件。用户窗体实际上是创建的窗口或者对话框,是用户界面的一部分。对能够添加到工作表中的控件的限制比添加到用户窗体中的控件要严格。

     

    能够添加到工作表中也可以添加到用户窗体中的控件:

    1.       标签是静态的文本区域,用于标识其他界面元素或者提供信息。因为标签是静态控件,所以用户不能改变它们的内容。

    2.       分组框控件用于将其他控件进行组合。分组框控件提供可见的方框,以便用户知道哪些是与同一内容有关的组合起来的控件。

    3.       复选框选项按钮,它们有一个共同的目的:允许用户在各种选项中进行选择,这是它们的相同点。

    4.       列表框组合框控件用来显示从多个选项中进行选择。列表框(如图3-5所示)只允许用户进行单选。而组合框(如图3-6所示)则允许用户从列出的项目中进行选择或者输入一个其他值。

    列表框和组合框在允许用户从可能的选项中进行选择的功能上和选项按钮相似。许多开发者都采用如下的使用规则:如果选项多于三个,则使用列表框或者组合框。

    5.       滚动条控件不是你所见到用来给很长的窗体添加滚动能力的控件,而是一种选择机制。

    6.       微调控件也是一种数值选择机制。

    推荐的控件命名前缀

    控件类型

    前缀

    复选框

    chk

    组合框 

    cbo

    命令按钮

    cmd或者btn

    因为某种原因,Microsoft给命令按钮取了两个名字。在窗体工具栏中,称为按钮,而在工具箱中称为命令按钮。在VisualBasic中,称之为命令按钮。也许这个控件最常用的前缀应该是cmd

    分组框

    grp或者fra

    因为某种原因,Microsoft给分组框(GroupBox)取了两个名字。在窗体工具栏中,称为分组框,而在工具箱中称为框架(frame)。在Visual Basic中,称之为框架(frame)。也许这个控件最常用的前缀应该是fra

    图像

    img

    标签

    lbl

    列表框

    lst

    多页

    MultiPagemul

    选项按钮

    opt

    引用编辑

    RefEditref

    滚动条

    hsb或者vsb,取决于是水平的还是垂直的

    微调项

    spn

    选项卡条

    TabStriptab

    文本框

    txt

    切换按钮

    tog

     

     

     

    四.

        变量&常量

     VBA代码必须寄存在某个地方,这个地方就是模块。有两种基本类型的模块:类模块标准模块。模块中的每个过程或者是函数过程,或者是子程序。

     模块的正式定义是作为一个单元保存在一起的VBA定义和过程的集合。

     VBA允许你创建自己的对象,对象的定义包含在类模块中。

     ExcelVBA不关心过程位于哪个模块中,只要过程位于打开的工作簿中即可。过程被定义为VBA代码的一个单元,过程中包括一系列用于执行某个任务或是进行某种计算的语句。工作簿中的每个过程都有唯一的名字加以区分。有两种不同的过程:子程序函数过程。子程序只执行一个或者多个操作,而不返回数值。当录制完宏查看代码时,所看到的就是子程序的例子。宏只能录制子程序,而不能录制函数过程。

    函数过程通常情况下简称为函数,要返回一个数值。这个数值通常是计算的结果或者是测试的结果。

     VBA对子程序和函数有如下的命名规则  * 第一个字符必须是字母  * 名字中可以包含字母数字下划线  * 名字中不能包含空格句号惊叹号,也不能包含字符@&$  * 名字中最多包含2 5 5个字符。

    变量是用于临时保存数值的地方。每次应用程序运行时,变量可能包含不同的数值,而在应用程序运行时,变量的数值可以改变。

      VBA数据类型

     

    数据类型

    存储空间

    数值范围

    Byte

    1字节

    0255

    Boolean

    2字节

    True或者False

    Integer

    2字节

    3276832767

    Long(长整型)

    4字节

    21474836482147483647

    Single

    4字节

    负值范围:-3.402823E38~-1.401298E45正值范围:1.401298E453.402823E38

    Double

    8字节

    负值范围:-1.79769313486232E308~-4.94065645841247E324正值范围:4.94065645841247E3241.79769313486232E308

    Currency

    8字节

    922337203685477.5808922337203685477.5807

    Decimal

    14字节

    不包括小数时:+/79228162514264337593543950335包括小数时:+/7.9228162514264337593543950335

    Date

    8字节

    10011日~99991231

    Object

    4字节

    任何引用对象

    String(长字符串)

    10字节+1字节/字符

    0~约20亿

    String (固定长度)

    字符串的长度

    1~约65400

    Variant (数字)

    16字节

    Double范围之内的任何数值

    Variant (文本)

    22字节+1字节/字符

    数据范围和变长字符串相同

      作为VBA程序员,一个目标是选择需要存储空间尽可能小的数据类型来保存需要存储的数据

    Dim语句的基本语法如下:  Dim 变量名  As  数据类型   对变量的命名规则和对过程的命名规则相同。若没有为Dim语句中的变量提供数据类型,则它们被自动指定为Variant类型。

    变量的命名前缀

     

    数据类型

    短前缀

    长前缀

    Array

    a

    ary

    Boolean

    f

    bin

    Byte

    b

    bit

    Curren

    c

    yccur

    Date/Time

    dt

    dtm或者dat

    Double

    d

    dbl

    Integer

    i

    int

    Long

    l

    lng

    Object

    o

    obj

    Single

     

    sng

    String

    s

    str

    Variant

    v

    var

     

    数组是具有相同数据类型并且共享同一个名字的一组变量的集合。数组中的元素通过索引数字加以区分。

    定义数组的语法如下:

      Dim  array_name (n)  As  type

      其中n是数组中的元素的数目。VBA支持多维数组。声明数组时的另一种选择是不给定大小。这样,当程序开始运行时,就具有定义数组大小的灵活性。例如,应用程序让用户创建一张表格,可以提示用户确定要创建的表格的行和列的数目。通过创建动态数组就可以做到这样,甚至还可以使用户在创建完表格(实际上是数组)后对行或列进行删除。

    变量的作用是非静态信息的存储容器。当需要存储静态信息时,可以创建常量。使用常量有两个原因,其一是常量可以存放数值供程序运行时多次引用而不改变,但是这些数据可能在将来发生变化。一个很好的例子是税率。另一个原因是使用常量可以增加程序的可读性。TAXRATE.08167要好理解得多。

    要声明常量并设定常量的值,需要使用Const语句。常量声明后,不能对它赋一个新的数值。

    作用域问题:

    定义变量的位置就决定了变量的作用域。当在过程内创建变量时,该变量只能用于这个过程中,其他的过程都不能使用这个变量以及它的数值。这种情况下,变量成为程序级变量或者局部变量,因为相对于定义这个变量的过程而言,变量是局部的。如果在模块的“通用声明”区域(可以在模块顶部一个名为“通用声明”的区域进行定义)中定义常量或者变量,那么定义在该模块中的所有过程都可以使用。这种变量称为模块级变量。还有一种等级的作用域称为公共级。公共级变量可以用在应用程序的任何过程中,不论过程和变量是否定义在同一个模块中。

     

     

     

    .

        用户输入

     代码中的ThisWorkbook.Name用来获取当前工作簿的名字。

                   MsgBox函数的语法如下:

                           MsgBox(prompt[,buttons][,title][,helpfile,context])

     

    这个函数必须具有的参数只有promptprompt的值是将在对话框中作为信息显示的字符串。注意在给出的语法中括号的运用。MsgBox是一个函数,这意味着它将返回一个值。在前面给出的例子中并没有括号。如果去掉函数参数的括号,就是在告诉 V B A不需要函数的返回值。

    VBA中的续行号是空格加下划线。

    如果没有为buttons参数提供数值,默认设置下,VBA假设你只希望在创建的对话框中添加“确定”按钮。可选参数buttons是一个非常有用的参数,它允许你控制:  * 消息框中包括的按钮的数目  * 消息框中包括的按钮的类型  * 消息框中显示的图标  * 消息框的默认按钮  * 消息框的特征

    第一组设置对话框显示的按钮数目和类型,第二组选择图标的风格,第三组设置默认按钮,第四组设置对话框的特征。当添加数值创建最终的buttons参数时,从各组数值中只能选择一个。

    可用的MsgBox函数的buttons参数值

     

    参数组

    常量

    数值

    描述

    第一组

    vbOKOnly

    0

    只显示确定按钮(默认设置)

    vbOKCancel

    1

    显示确定取消按钮

    vbAbortRetryIgnore

    2

    显示放弃重试忽略按钮

    vbYesNoCancel

    3

    显示取消按钮

    vbYesNo

    4

    显示按钮

    vbRetryCancel

    5

    显示重试取消按钮

    第二组

    vbCritical

    16

    显示危险消息图标

    vbQuestion

    32

    显示警告询问图标

    vbExclamation

    48

    显示警告消息图标

    vbInformation

    64

    显示信息消息图标

    第三组

    vbDefaultButton

    10

    第一个按钮为默认按钮

    vbDefaultButton

    2256

    第二个按钮为默认按钮

    vbDefaultButton

    3512

    第三个按钮为默认按钮

    vbDefaultButton

    4768

    第四个按钮为默认按钮

    第四组

    vbApplication Modal

    0

    应用程序模式:用户必须对消息框作出响应才能继续使用当前的应用程序

    vbSystemModal

    4096

    系统模式;所有应用程序都被挂起直至用户对消息框作出响应

    附加选项

    vbMsgBoxHelpButton

    16384

    在消息框上添加帮助按钮

    vbMsgBoxSetForeground

    65536

    将消息框设置为前景窗口

    vbMsgBoxRight

    524288

    显示右对齐的消息框

    vbMsgBoxRtlReading

    1048576

    指定在希伯莱和阿拉伯系统中显示的文本应当从右向左阅读

     

     

    MsgBox函数的返回值

     

    常数

    说明

    vbOK

    1

    确定

    vbCancel

    2

    取消

    vbAbort

    3

    终止

    vbRetry

    4

    重试

    vbIgnore

    5

    忽略

    vbYes

    6

    vbNo

    7

     

     

     

    InputBox函数显示一个对话框,并且提供便于用户输入的文本说明。InputBox函数的语法如下:

    InputBox(prompt[,title][,default][,xpos][,ypos][,helpfile,context])

    InputBox函数必须具有的参数是prompt。和MsgBox函数的prompt参数一样,prompt参数的值是将显示在对话框中的字符串。  可选参数title显示在对话框标题栏中的字符串表达式。和在MsgBox函数中一样,如果没有给title参数设定数值,标题栏将显示“MicrosoftExcel”。

    为了节省用户的时间,你也许希望给可选参数default设定数值。这个参数的值可设为一个字符串表达式,当用户没有输入任何数据时,其值将显示在文本框中作为默认响应。如果省略了这个参数,文本框将显示为空白。如果要求用户输入邮政编码,而且大部分顾客的邮政编码都相同,那么应当提供一个邮政编码作为默认输入

    xposypos也是可选参数,这两个参数决定输入框在屏幕上的显示位置

    helpfilecontext这两个可选参数只有在为应用程序创建了帮助文件时才有用

    InputBox函数的返回值是用户在对话框上的文本框中输入的信息。

    如果用户单击“取消”按钮,InputBox函数将返回一个零长度的字符串""。无法控制输入框的大小,这正是“所见即所得”的一个例子。

    InputBox方法s

    Excel支持另一种获取用户输入的方式—InputBox方法。

    InputBox方法的语法:  Application.InputBox(prompt,[Title],[Default],[Left],[Top],[HelpFile],[HelpContextId],[Type])

    细微的区别是LeftTop参数,它们与xposypos参数等价。通过可选参数Type可以指定返回值的数据类型。

    参数Type可以使用的数值

     

    期望的返回值

    0

    一个公式

    1

    一个数字

    2

    文本(字符串)

    4

    一个逻辑值,例如trueFalse

    8

    一个单元格引用

    16

    一个错误值

    64

    一个值的数组

    如果你希望接收数字和文本,那么可将Type参数设置为1+2。如果没有设置Type参数的值,InputBox方法将返回文本。

    InputBox方法的一个优点是内置的出错处理InputBox方法和InputBox函数的另一个区别是,当用户单击“取消”按钮时的返回值。如果使用InputBox函数而用户选择了“取消”按钮,则返回一个零字节的字符串。如果使用InputBox方法,则返回False

    V B A支持命名参数。使用命名参数可以按照任意次序传递参数。如:iResult=Application.InputBox("Please enter your favorite number:" ,Type=1 )

     

    如果需要合并字符串,那么可以使用字符串连接符&

     

     

     

     

     

    六.

         流程控制

     

    比较运算符 意义     = 等于  < > 不等于  > 大于  >= 大于或等于  < 小于  <= 小于等于

       逻辑运算符 意义  And 如果两个条件为真,则结果为真  Or 如果两个条件中有一个为真,则结果为真  Not 如果条件表达式为假,则结果为真;如果条件表达式为真,则结果为假  Xor 如果一个且仅有一个条件为真,则结果为真;如果两个条件均为真,或均为假,则结果为假

    If...Then...Else...语句。这条语句的语法如下:  If condition Then  [statements]  [ElseIf condition-n Then  [elseif statements]...  [Else  [elsestatements]]  End If

     

     

    Select Case易于阅读。Select Case语句的语法如下:  Select Case testexpression  [Caseexpressionlist-n  [statements-n]]...  [Case Else  [elsestatements]]  End Select

     

    Excel包括大约200个内置的对话框,通过使用VBA可以访问所有这些内置的对话框。

     

     

     

     

     

     

       循环

    For Next语句的语法如下:  For  counter=start  To  end  [Stepstep]  [statements]  [ExitFor]  [statements]  Next[counter]

    counter是一个整数变量,每次循环增加1,除非设置了可选参数step,此时counter每次以step的数值变化。每次循环都要执行Next语句。 counter的值大于end的数值时,循环结束执行。

     

    Do循环是条件循环。共有两种Do循环语句:DoWhileDoUntilDoWhile语句在某个特定的条件为True时重复执行一组语句,而DoUntil则重复执行一组语句直到某个特定的条件变为True为止。Do循环语句的语法如下:

    语法1

    Do [{WhileUntil}condition]  [statements]  [ExitDo]  [statements]  Loop  语法2  Do  [statements]  [ExitDo]  [statements]  Loop[{While Until}condition]

     

       要查看MsgBox函数和其他VisualBasic内置常数的列表,可使用ObjectBrowser。寻找以VB开始的类,也可查看Constant类,也可找到Excel的内置常数。

     

    =======================================================================   

    =======================================================================   

    =======================================================================   

    =======================================================================   

    =======================================================================     

    =======================================================================   

    =======================================================================   


    最新回复(0)