VBA学习笔记

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

例如:
Dim a As Long
a = 30000 * 2 (这里会发生溢出错误)
处理办法是在30000后面加&符号,将其声明为long类型
a = 30000**&** * 2
在这里插入图片描述
在这里插入图片描述
如果程序比较长可以用下划线连接,但是前后必须有空格字符串连接,用下面办法
把多行程序拼成一行用冒号
在这里插入图片描述
****是做整数除法
在这里插入图片描述

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

exit do;exit sub;exit function;exit for

在这里插入图片描述
直接屏蔽错误行
在这里插入图片描述

三、关于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赋值,但是写入一列要用下面方法转置
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
获取多维数组的最大最小小标
在这里插入图片描述

五、操作文件

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对象查询表格边界

在这里插入图片描述
在这里插入图片描述
range对象的find方法,可以使用office自带的几个通配符
在这里插入图片描述
在find时关心格式,在查找的时候要制定***LookAt、LookIn、SearchOrder、MatchByte参数***,否则会造成结果不可预测,会记录住搜索框的选项
在这里插入图片描述

八、可变参数 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

在这里插入图片描述

十二、自定义排序排序

在这里插入图片描述
在这里插入图片描述

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

十二、正则表达式

1.()圆括号的使用
在这里插入图片描述
2.正则中的环视功能
在这里插入图片描述

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

  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加载项

将一个函数保存为加载项,可以在任何文件的单元格中调用函数
在这里插入图片描述
在这里插入图片描述

将一个子程序保成一个加载项,让他可以被任何程序调用
在这里插入图片描述
在这里插入图片描述

在工具栏中添加按钮
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非常好的问题!让我来回答你的问题。 首先,关于VBA学习笔记(一):自动添加代码,你可以使用VBA的宏来自动添加代码。具体步骤如下: 1. 打开你要添加代码的Excel文件,并按下Alt + F11进入VBA编辑器界面。 2. 在左侧的“项目资源管理器”窗格中,展开你的Workbook,并双击“这台电脑”(或“Microsoft Excel 对象”),打开相应的代码窗口。 3. 在代码窗口的顶部,选择“工具” > “宏” > “录制新宏”。 4. 在弹出的“新建宏”对话框中,为新宏命名,并选择一个快捷键,以便日后调用。 5. 点击“确定”后,VBA会自动开始录制你的操作。 6. 在代码窗口中,添加你需要自动执行的代码。 7. 完成代码添加后,点击“停止录制”按钮,保存你的新宏。 接下来,关于VBA修改注册表,你可以使用VBA的“WshShell”对象来实现。具体步骤如下: 1. 在VBA编辑器中,打开你要修改注册表的代码窗口。 2. 在代码窗口的顶部,添加以下代码: ``` Dim WshShell As Object Set WshShell = CreateObject("WScript.Shell") ``` 这将创建一个名为“WshShell”的对象,用于执行后续的注册表修改操作。 3. 接下来,你可以使用该对象的“RegWrite”方法来修改注册表。例如,以下代码将修改Windows启动时自动运行的程序列表: ``` WshShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\MyApp", "C:\MyApp.exe", "REG_SZ" ``` 该代码将在“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run”键下添加一个名为“MyApp”的值,其值为“C:\MyApp.exe”,类型为“REG_SZ”。 4. 完成代码添加后,保存并执行你的代码。 希望这些步骤对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值