Excel VBA编程笔记

来源:互联网 发布:网络直播 评论文章 编辑:程序博客网 时间:2024/05/17 22:52
一 定义变量
在VBA中定义变量需借助关键字并通过以下语句实现:
Dim 变量名 As 变量类型
变量名:由字母、数字和一些标点符号构成(不包括:,#$%&@!),但名称不能以数字开始,也不可以含有空格。当然,保留的关键字也是不能用作变量名称。
变量类型:Boolean、Byte、Integer、Date、String,还有一些其它类型,如果想知道详情,可以Google关键字"VBA 变量类型"
例如:Dim VName As String
定义了一个名为VName的字符串

在定义变量时有一个非常有用的关键字-Redim,定义动态数组时非常有用。
定义数组:Dim 数组名(数组维数及长度参数) As 数组类型
例如:Dim AName(10) As String
定义了长度为10的一维字符串数组AName。但如果在程序运行前不知道数组的维度及长度,则我们需要用到动态数组。
例如:
Dim DAName() As String
Dim ArrayLen As Integer

ArrayLen = 30
Redim DAName(ArrayLen) As String
这样就定义了一个长度为ArrayLen的一维数组DAName,根据需要你还可以定义二维及更高维度数组,或者动态数组。

二 定义函数
在VBA中同样可以定义函数及使用函数。函数定义的结构大致如下:
Function 函数名(参数列表) As 返回参数类型
    函数主体语句

    函数名 = ... '该句则为返回语
End Function

三 逻辑分支
存在以下形式的逻辑分支语句:
A> If 条件表达式 Then 执行语句 End If
条件表达式为真,则执行语句会被运行;否则跳过

B> If 条件表达式 Then 执行语句 Else 执行语句2 End If
条件表达式为真则执行语句被运行;否则执行语句2被运行

C> If 条件表达式1 Then 执行语句 Elseif 条件表达式2 Then 执行语句2 ... End If
多分支单入口逻辑分支语句

例1:
If yourAge >= 18 Then
    Msgbox("You can have your driving license now!")
End If

例2:
If yourAge >= 18 Then

    Msgbox("You can have your driving license now!")
Else

    Msgbox("No, you couldn't get a driving license yet.")
End If

例3:
If yourAge = 18 Then

    Msgbox("You can have your driving license now!")
Else
if yourAge > 18 Then
    Msgbox("you should have the driving license.")
Else
    Msgbox("No, you couldn't get a driving license yet.")
End If

D> Select Case
该分支语句类似于咱熟悉的Switch,举个例子就一目了然了。
Select Case yourAge
    Case is = 18
       Msgbox("You can have your driving license now!")
    Case is > 18
       Msgbox("you should have the driving license.")
    Case is < 18
       Msgbox("No, you couldn't get a driving license yet.")
End Select

以上就是用到过的VBA中的分支语句,如果有特殊应用,可以Google之,该语句还有一些特殊的属性可待挖掘。

四 循环语句
A> For ... Next
该形式采用最多,类似于C、Java中的普通for循环,举例如下:
For colNum = startCol To endCol
    Cells(1, colNum).Interior.ColorIndex = 6
Next
该循环将会把从列startCol到列endCol的第一个单元格颜色改为红色

B> Do While ... Loop
该形式亦类似于C、Java中的do while循环,举例如下:
Do While inputValue <> "OK"

    inputValue = InputBox("Do you agree with them?")
Loop
流氓程序就是这样写的,不同意的话,永远也别想关掉那该死的对话框

当然,还有其它形式的循环语句可供你使用。诸如:Do ... Until;While ... Wend;For Each .. Next

P.S. 分支语句与循环语句都是可以嵌套使用的

五 两个有用的对话框
A> Msgbox
消息对话框:基本上用来向用户传递信息,例如警告、提醒之类

B> InputBox
传值对话框:如果希望增加程序与用户的互动性,即从用户那儿获得一定的信息,则可以使用该对话框。而它会将用户填写在文本框中的值传回以供程序使用。

五 操作单元格
A> Cells(坐标)
以左上角为二维坐标原点,第一个单元格坐标为(1,1)依次类推来定位每一个单元格
例如:Cells(4,3).Value = "hello, cell"
将第四行第三个单元格的内容设置成"hello,cell"

B> Range("位置字符串")
在excel表格每一列都会有一个字母给予标记,所以我们也可以通过使用这个特性来定位单元格
例如:Range("C4").Value = "hello, cell"
将第C列第四个单元格的内容设置成"hello,cell"

六 得到一个Excel文档Sheet的数目
ActiveWorkbook.Worksheets.Count 将得到当前活动Excel文档中sheet的数目
当然,你也可以通过Workbooks("Excel文档名称")来代替ActiveWorkbook来获得相应的Excel文档的sheet数目

提示:以Workbooks("Excel文档名称")的形式,可以类推获得Worksheets("sheet名称")或者是Worksheets(sheet在该文档中的编号)。例如Worksheets(1)则是指活动Excel文档中的第一个sheet工作表

七 选择一个区域
我们经常要在excel表格中选择一块区域,并对区域内的单元格进行操作。而Range("位置字符串:位置字符串").Select则可以实现该功能
例如:Range("A1:C4").Select,执行该条语句后,就相当于操作-按住左键将鼠标从单元格A1拖到单元格C4所得到区域块

当然,我们经常会要选择一行或者一列中直到最后一个被使用的单元格。最笨的方法就是知道该行或列最后一个被使用的单元格对应的列数或者行数,然后再按上述的方法进行操作。而实际上我们并不需要如此,因为有快捷的方式。
例如:
Range("C2").Select
Range(Selection, Selection.End(xlDown)).Select
该语句将会选择C列从第二个单元格直到最后一个被填充了内容的单元格

提示:对于表格中已经被选择的区域,我们可以通过关键字Selection来进行引用
例如:Selection.Rows.Count,将得到当前选择区域所包含的行数

八 通过VBA连接数据库
Dim conn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim col As Integer
Dim strCon As String
Dim strSql As String
   
   
strCon = "DRIVER={IBM DB2 ODBC DRIVER};DSN=Host;uid=UserID;pwd=password;dbalias=dbName;"
   
Set conn = CreateObject("ADODB.Connection")
conn.CursorLocation = adUseClient
conn.Open strCon
   
conn.Execute ("delete from sct00011t.CTTCNE1K0 where CAS_KNR_NO='G08104361'")

VBA是边做边学的,而上面则是将用到一些记录下来。因为现在已经是项目结束数月后了,所以有许多忘记了。同样因为边做边学,所以难免存在错误或者愚笨的做法,还请指出,有疑问也请留言。
原创粉丝点击