不怕学得杂,就怕学得杂之后过段时间什么都忘掉了,还是把笔记贴这里吧

一.        EXCEL VBA 基础语法

 

1.  对变量或对象属性赋值使用等号(=),对变量进行赋值使用set:=,如:

Set myobj=oldobjmyobj:=oldobj

 

2.  基本语句

长语句可以用 空格+下划线 换行

(1) If then  [else]

If then  elseif then  elseif then …..else  end if

 

(2) Select case …case …end case,如:

Select case PID

Case “a101”

        Price=100

Case “a102”

        Price=200

……..

Case else

        Price=900;

End case

 

(3) choose(index,choice1,hoice2….)

        用来选择由index指定的后面的一列数据,下标由1开始,如:

gotchoice = Choose(1, "11111", "2222"),返回“11111”

      

    (4) Switch(expr-1,value-1[,expr-2,value-2_[,expr-n,value-n]])

              如果expr-1为真,则返回value-1,否则返回expr-2

    (5) For counter=start to end [Step step]               ' step缺省值为1

[statements]

[Exit For]                      '在这里在达到某种条件是退出循环

[statements]

Next counter

如:

For Words=10To1 Step-1               ' 建立10次循环

    For Chars=0 To 9                  ' 建立10次循环

      MyString=MyString & Chars       ' 将数字添加到字符串中

    Next Chars                       ' Incrementcounter

    MyString=MyString & " "            ' 添加一个空格

Next Words

      

 

    (6) For Eachin Next语句 主要功能是对一个数组或集合对象进行,让所有元素重复执行一次语句

For Each element In group

Statements

[Exit for]

Statements

Next[element]

    (7) Do {while |until} condition

Statements

Exitdo

Loop

或者是

Do

Statements

Exitdo

Loop {while |until} condition  如:

 

Dim a As Integer

a = 90

Do While a < 100

a = a + 6

Loop

 

 

      (8) on expression goto

              On error goto

 

 

3.  数据类型:string,integer,…..

字符串的合并采用关键字:&,如

        Dim myStr as String

        Dim i as integer

        i=10

        myStr= “the I is “ & i     输出the I is 10

系统会自动将其他类型的数据转换为字符串形式

 

常用的字符串函数有:

Strcomp(str1,str2),返回的值有-1,0,1

Mid(strSource,startIndex,len),取出字符串strSourcestartIndex开始的Len个字符,下标是从1开始的

Left(strSource,len),取strSource里从左边开始的Len个字符

Vba.trim(strSource),去除strSource里面的空格,对应类似的函数还有vba.trimLeft(strSource),vba.trimRight(strSouce),分别去除左边的空格和右边的空格

split(strSouce,strDelimiter),分割字符串

 

类型转换:

CInt(sourceContent),将sourceContent里的数据转换成整形

CSng(sourceContent),将sourceContent里的数据转换成浮点型

CDatesourceContent),将sourceContent里的数据转换成日期型数据,日期型数据可以进行加减运算

 

自定义数据类型,相当于C里面的结构体,使用Type typeName …..end Type,应将其定义到模块中,如:

Type DealInfo

strDate As String

startIndex As Integer

endIndex As Integer

End Type

      

4.  过程和函数

VBA具有四种过程:Sub过程、Function函数、Property属性过程和Event事件

 

1Sub过程

Sub过程的参数有两种传递方式:按值传递(ByVal)和按地址传递(ByRef)。如下例:

    Sub password(ByVal x as integer,  ByRef y as integer)

       If y=100theny=x+ y else y=x-y

       x=x+100

End sub

默认的情况是按byRef传递的

 

       2function sub过程类似,但是可以有返回值,返回值传递给函数名

       Function password(ByVal x as integer,byref y as integer)as boolean

       If y=100then y=x+y else y=x-y

       x=x+100

       if y=150 then password=true else password=false

 

End Function

 

       函数和过程的级别有工作表级和工作簿级,写在工作表上的函数和过程一般开头都有private限定符,这表示这个函数(或过程)只能由当前工作表里的其他函数调用,而工作簿级的函数则一般写在模块中,限定符使用Public,这时它可以被所有的函数或过程调用,还可以在EXCEL的表单里使用这个函数。

       调用过程:call subName(…)

       调用函数:

                     Dim retureVal as type

                     returnVal=FuncName(…)

 

5.  数组:包括静态数组和动态数组

静态数组定义:dim arrayName( length) as type       一维数组

         dim arrayName(row,colum) as type      二维数组

默认的情况下,数组的下标是从0开始的

 

动态数组定义:dim arrayName( ) as type

这样定义的时候没有分配任何内存空间,在使用之前,必须用redim对其进行初始化,如:

Dim stuName() as string

Redim stuName(10)

……….赋值

Redim preserve stuName(20)    增加长度为20,并保留原来前10个数据

 

 

二.        操作EXCEL 对象

EXCEL里面的对象根据不同级别有:applicationworkbookworksheetrangecells

 

Application

是可用的顶级对象,由于所有的EXCEL VBA程序都是以EXCEL作为容器来运行的,所以Application对象就是EXCEL这个程序本身

       Workbook

              是一个EXCEL文件

       Worksheet

EXCEL文件里的一个工作表,可以使用worsheets”sheetName”)或worksheets(index)即可获得相应的工作表对象

       Range

是一个工作表里的区域,可以为不相互连通的多个区域集合,通过指定区域来获得,如Range(“A1:B3”)则获得当前工作表里的A1B3的所有单元格的集合,构成一个区域。如果是多个区域,可以用逗号分开,如Range(“A1:B3,C4:D5”),使用Range可以对一个区域进行赋值,如Range(“A2:D10”)=””,为将A2D10的内容清空

 

       Cells

工作表里的单元格,根据Cells(rowIndex,columIndex)获得指定的单元格,下标是从1开始的,而非0。如Cells(1,2).value=”test”,是将B1的值设为test

 

Selection

        表示当前被选中对象

 

Excel里的对象的获得都是通过OLE接口调用获得的,而OLE接口的调用是费时的,所以在代码里,如果要多次用到一个从其上级对象下溯到的对象,应该先取出这个的对象的引用,后面的操作都在这个引用上面进行。同时如果要在一个对象上设置多个属性的值,应该使用with语句,如:

 

With thisObj

       .property1=val1

       .property2=val2

       ………………..

End with

使用EXCEL表单函数,在excel数据界面可以使用的函数,在程序里面也可以使用,都被封装在WorksheetFunction对象中,例如要获得A列的非空单元个数,可以使用

WorksheetFunction.Counta(Range("A:A"))

三.        学习EXCEL VBA编程的方法

EXCEL里面几乎所有的操作都可以录制成宏,所以如果要用代码实现那些可以用录制宏实现的功能,但是又不知道一些属性和方法,就可以先把这些操作录制成宏,然后查看其宏代码,了解其所用到的属性和方法,然后自己就可以写出精简版的代码了

 

 

作者:kfqcome 发表于2010-10-2 20:25:00 原文链接
阅读:66 评论:0 查看评论
posted on 2010-10-02 12:25  柯大侠  阅读(1699)  评论(1编辑  收藏  举报