不怕学得杂,就怕学得杂之后过段时间什么都忘掉了,还是把笔记贴这里吧 一. EXCEL VBA 基础语法 1. 对变量或对象属性赋值使用等号(=),对变量进行赋值使用set或:=,如: Set myobj=oldobj或myobj:=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 Each…in 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),取出字符串strSource第startIndex开始的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里的数据转换成浮点型 CDate(sourceContent),将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里面的对象根据不同级别有:application,workbook,worksheet,range,cells Application: 是可用的顶级对象,由于所有的EXCEL VBA程序都是以EXCEL作为容器来运行的,所以Application对象就是EXCEL这个程序本身 Workbook: 是一个EXCEL文件 Worksheet: 是EXCEL文件里的一个工作表,可以使用worsheets(”sheetName”)或worksheets(index)即可获得相应的工作表对象 Range: 是一个工作表里的区域,可以为不相互连通的多个区域集合,通过指定区域来获得,如Range(“A1:B3”)则获得当前工作表里的A1到B3的所有单元格的集合,构成一个区域。如果是多个区域,可以用逗号分开,如Range(“A1:B3,C4:D5”),使用Range可以对一个区域进行赋值,如Range(“A2:D10”)=””,为将A2到D10的内容清空 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 查看评论
|
|
来自: Excel实用知识 > 《VBA与EXCEL》