1、VBA 基础知识1、VBA 有三种程序类型:宏程序、自定义函数程序、事件程序1)宏程序Sub A() 公用程序,可以被其它程序调用Range(“a1“) = 100End SubPrivate Sub A() 私有程序,不可以被其它程序调用Range(“a1“) = 100End Sub调用实例 1):Sub A()Range(“a1“) = 100End SubSub B()Call A Call 为调用命令,也可以省略End Sub调用实例 2):Sub 统计(N)If N = 1 ThenRange(“C2“) = Application.WorksheetFunction.CountA
2、(Range(“a:a“)ElseIf N = 0 ThenRange(“D2“) = Application.WorksheetFunction.Sum(Range(“a:a“)End SubSub 计数()统计 1End SubSub 求和()统计 0End Sub2)自定义函数程序Function 工作表数量()工作表数量=Sheets.Count 取工作表个数End Sub应用:(1)可以在单元格中直接调用:例在 A1 中输入:=工作表数量()(2)程序中调用: Sub A1 中输入工作表数量()Range (“A1”) = 工作表数量 调用自定义函数End Sub3)事件程序例如程序
3、在打开工作表时触发:Private Sub Workbook_Open()Range (“A1”) = 100End SubSub mycopy()Range(“A1“).Copy Range(“B1“) 将 A1 单元格里的数据复制到 B1 单元格End SubSub mydel()Sheets(“sheet1“).Delete 删除工作表 sheet1End Sub常用的函数:&(连接函数); (整除函数) ;mod(求余数函数)2、With 语句:未使用 with 语句Sub 字体格式 1()Range(“A1“).Font.Name = “宋体“Range(“A1“).Font.Siz
4、e = 14Range(“A1“).Font.ColorIndex = 3Range(“A1“).Font.Bold = TrueEnd Sub使用 with 语句Sub 字体格式 1()With Range(“A1“).Font.Name = “宋体“.Size = 14.ColorIndex = 3.Bold = TrueEnd WithEnd Sub3、If 语句:1)单条件判断:Sub 正数()If Range(“a1“).Value 0 ThenRange(“a2“).Value = “正数”ElseRange(“a2“).Value = “非正数”End IfEnd Sub2)多条
5、件判断:Sub 正数()If Range(“c1“).Value 0 ThenRange(“d1“).Value = “大于零“ElseIf Range(“c1“).Value 0Range(“b1“) = “大于零“Case Is = 0Range(“b1“) = “等于零“End SelectEnd Sub4)循环语句:循环语句,从 A1A100 依次填入 1100Sub a()Dim x 定义变量 XFor x = 1 To 100Range(“a“ & x) = xNext xEnd SubSub a()Dim x 定义变量 XFor x = 1 To 100 Step 2Range(
6、“a“ & x) = xNext xEnd Sub4、模块:普通模块:无事件类模块:有事件工作表和工作簿是类模块,窗体也是类模块5、如何新建并保存一个工作簿:Sub 新建并保存 1()ActiveWorkbook.SaveAS “c:/Mbook1.xls” ActiveWorkbook 为活动工作簿End SubSub 新建并保存 2()Workbook.AddThisWorkbook.SaveAS “c:/Mbook1.xls” ThisWorkbook 为当前工作簿End SubSub 新建并保存 3()Dim MBOOK AS WorkbookSet MBOOK = Workbooks
7、.AddMBOOK.SaveAS “c:/Mbook.xls”Set MBOOK = NothingEnd Sub6、工作表事件:Activate 激活工作表时Deactivate 工作表从活动状态转为非活动状态时BeforeDoubleClick 双击工件表前BeforeRightClick 右键单击工作表时Calculate 对工作表进行重新计算之后Change 更改工作表中的单元格,或外部链接引起单元格发生改变时FollowHyperLink 单击工作表上的任意超链接时PivotTableUpdate 在工作簿中的数据透视表更新之后SelectionChange 工作表上的选定区域发生改
8、变时7、选取某个单元格:1)range(“单元格地址”).select 例如:Range(“A1”).Select 单元格地址必须用双引号括起来2)range(“列标” & 行数).select 例如:Range(“A” & 1).Select 列标是用英文字母表示,这里的 1 可为变量3)range(“定义名称”).select 例如:Range(“range1”).Select 定义的名称必须要用双引号括起来4)cells( 行数,列数 ).select 例如:cells(1,1).Select 行数和列数不能用双引号括起来5)cells( 行数,“列标”).select 例如:cells
9、(1,”A”).Select 行数不需要双引号,列标一定要双引号6)cells( 单元格序号 ).select 例如:cells(1).Select 单元格序号的顺序是先从左到右,要从上到下7)单元格地址.select 例如:A1.Select 单元格地址不能用双引号括起来8、选取指定工作表的某个单元格:1)Sheets(“工作表名称”). 单元格.select 例如:Sheets(“ 单元格的表示方法”).Activate 表示先将工作表激活Sheets(“单元格的表示方法”).Range(“A1”).Select2)Sheet1. 单元格 .select 例如:Sheet1.Activat
10、e 表示先将工作表激活Sheet1.Range(“A1”).Select3)Sheets( 工作表序号 ).单元格.select 例如:Sheets(1).Activate 表示先将工作表激活Sheets(1).Range(“A1”).Select9、练习:在 B32 显示工作表中任意被选择单元格的序号:序号=(行数-1)*256+列数事件失效和事件恢复代码:Sub unEnableEvent() 事件失活Application . EnableEvents =FalseEnd SubSub EnableEvent() 事件恢复Application . EnableEvents =TrueE
11、nd SubPrivate Sub Worksheet_SelectionChange(ByVal Target As Range)Dim x As Long 声明变量 XDim y As Long 声明变量 Yx = Target.Row 把当前单元格的行数赋值给 X,注意,如果为 ROWS,则返回一个对象,y = Target.Column 把当前单元格的列数赋值给 Y,注意,如果为 columns,则返回一个对象Range(“序号 “) = (x - 1) * 256 + y 把当前单元格的End Sub10、选取单元格区域:Cells .Select Cells 代表本工作表所有单元格Rows .Select Rows 代表本工作表所有行,即所有单元格Columns.Select Columns 代表本工作表所有列,即所有单元格