一、 vba两个integer变量相乘可能会出现溢出,无论储存结果的变量数据类型是多大

例如:

Dim a As Long

a = 30000 * 2 (这里会发生溢出错误)

处理办法是在30000后面加&符号,将其声明为long类型

a = 30000**&** * 2

vba function 返回多个值 if then vba函数返回多个变量_二维数组


vba function 返回多个值 if then vba函数返回多个变量_vba_02


如果程序比较长可以用下划线连接,但是前后必须有空格字符串连接,用下面办法

把多行程序拼成一行用冒号

vba function 返回多个值 if then vba函数返回多个变量_vba_03


****是做整数除法

vba function 返回多个值 if then vba函数返回多个变量_数据_04

二、异常处理(GOTO语句还可以用来跳出多层循环,exit可以跳出本层循环)

exit do;exit sub;exit function;exit for

vba function 返回多个值 if then vba函数返回多个变量_vba_05


直接屏蔽错误行

vba function 返回多个值 if then vba函数返回多个变量_二维数组_06

三、关于vab中的四舍五入

  • 函数Cint和Round函数都是采用的银行家四舍五入,就说将0.5转换成离他最近的整数,就说说3.5和4.5都会转换成4,这样有利于当四舍五入较多时,数据变大的问题
  • 如果要用我们常用的0.5都进位,可以用excel自带的函数Round;就是
    Application.WorksheetFunction.Round(X,2);2表示标记小数点后的位数,就是说将3.1415 =》
    3.14

四、数组

注意10代表最大下标,就是这个数组有11个元素,存放的是字符串
如何定义数组的时候没有声明最大下标,可以用ReDim进行声明,或是通过split拆分字符串直接赋值
定义二维数组Dim cn(9,10) As String 有10行,11列的二维数组(多维数组只需在后面加逗号即可)
定义二维数组Dim cn(1 to 9,1 to 10) As String 有9行,10列的二维数组
将range对象转换成二维数组必须声明为动态数组,必须是变体类型(不指定数据类型),下标是从1,1开始而不是默认的0,0
将***range对象***写回到单元格,让range对象等于单元格即可,二维数组不要求是变体

将一维数组写入到表格中,直接给range赋值,但是写入一列要用下面方法转置

vba function 返回多个值 if then vba函数返回多个变量_二维数组_07

vba function 返回多个值 if then vba函数返回多个变量_数据_08


vba function 返回多个值 if then vba函数返回多个变量_二维数组_09


vba function 返回多个值 if then vba函数返回多个变量_数据_10


获取多维数组的最大最小小标

vba function 返回多个值 if then vba函数返回多个变量_二维数组_11

五、操作文件

fileName = Dir(“d:\dome*.xlsx”) 可以找到目录下的所有xlsx文件

六、ActiveSheet

ActiveSheet.Cells.Rows.Count表示当前工作表的最大行数
ActiveSheet.UsedRange 表示使用过的范围对象
ActiveSheet.UsedRange.Row 起始行
ActiveSheet.UsedRange.Rows.Count 使用的行数
ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1 结束行

七、通过range对象查询表格边界

vba function 返回多个值 if then vba函数返回多个变量_数据_12


vba function 返回多个值 if then vba函数返回多个变量_数据_13


range对象的find方法,可以使用office自带的几个通配符

vba function 返回多个值 if then vba函数返回多个变量_数据_14


在find时关心格式,在查找的时候要制定***LookAt、LookIn、SearchOrder、MatchByte参数***,否则会造成结果不可预测,会记录住搜索框的选项

vba function 返回多个值 if then vba函数返回多个变量_数据_15

八、可变参数 Optional

函数传递参数 myFun(c:=5,a:=1)等价于myFun(1,5)
Function myFun(a,Optional b As Integer = 0, Option c As Integer = 0)
End Function
VBA默认传递的是引用(就是函数中变量修改后,主函数值也跟着修改),如果想不影响主函数Function myFun(ByVal a)

九、算数运算

  • List item a Mod b 返回的是a模b的值,就是a除以b的余数
  • List item 生成[a,b]区间的随机整数,包含a,b Int(Rnd()*(b-a+1)+a) 【为了避免每次都生产一样的随机数列,在前面加上 Randomize】

十、事件处理

Application.EnableEvents = False 可以关闭事件触发

十一、查找边界的方式

1.通过do while判断单元格下一行是否为空
缺点:不能处理连续数据
2.通过ActiveSheet.UsedRange
缺点:①可能会将只设置的格式,而没有数据的单元格包含进去
②删除最后一行后,UsedRange不会立刻变化,由于Excel考虑执行效率,不会立刻更新,只有执行保存操作后才会返回正确的结果
3.通过Range.End(方向)方法,相当于Ctrl+上下左右键
缺点:

  1. 如果表格没有数据,还是会返回第一行
  2. 如果表格写满数据,则会返回数据的上边界
  3. 只能找某一列的最后一行
  4. 如果遇到合并的单元格,会返回合并单元格的第一个单元格
  5. 筛选过或者是隐藏的行不会被处理,会从边界跳过去
    Set r = Cells(Rows.Count,1).End(xlUp)
    Set r = Cells(1,Columns.Count).End(xlToLeft) '查找最后一列
  6. 通过Range.SpecialCells(xlCellTypeLastCell) 【返回最后一个单元格(右下角的单元格)相当于UsedRange】
  7. 通过find方法
Dim r As Range
Set r = Cells.Find("*",after:=Range("A1"),searchorder:=xlRows,searchdirection:=xlPrevious)
If r Is Nothing Then
	MsgBox "表格中没有数据"
Else
	MsgBox r.Row
End If

vba function 返回多个值 if then vba函数返回多个变量_二维数组_16

十二、自定义排序排序

vba function 返回多个值 if then vba函数返回多个变量_sed_17


vba function 返回多个值 if then vba函数返回多个变量_sed_18

多关键字排序原理:相当于先对次要关键字排序,在对主关键字排序的多次单关键字排序

十二、正则表达式

1.()圆括号的使用

vba function 返回多个值 if then vba函数返回多个变量_数据_19


2.正则中的环视功能

vba function 返回多个值 if then vba函数返回多个变量_sed_20

十三、打开文件对话框的几种方式

  1. 方法:Application.GetOpenFilename
  2. 方法:Application.GetSaveAsFilename
  3. 属性:Application.FileDialog

十四、错误处理

  1. 从现在开始不处理错误,直接跳到下一行 On Error Resume Next
  2. 在可能出现错误的代码前面写上 ,On Error GoTo somethingWrong,再程序最后写上标签somethingWrong: 在这个标签前要Exit Sub
  3. Err常量代表系统中最近一次发生的错误,Err.Number错误代码;Err.Description该错误的详细描述;Err.Clear将错误清空
  4. 使用Resume Next可以让程序提示完错误以后再跳转回程序
  5. On Error GoTo 0 恢复VBA默认的错误处理机制

十五、Excel加载项

将一个函数保存为加载项,可以在任何文件的单元格中调用函数

vba function 返回多个值 if then vba函数返回多个变量_vba_21


vba function 返回多个值 if then vba函数返回多个变量_sed_22

将一个子程序保成一个加载项,让他可以被任何程序调用

vba function 返回多个值 if then vba函数返回多个变量_vba_23


vba function 返回多个值 if then vba函数返回多个变量_vba_24

在工具栏中添加按钮

vba function 返回多个值 if then vba函数返回多个变量_二维数组_25