编程语言都是时间杀手,慢慢学慢慢练用中练吧
1 VBE编辑器,有时候会有些问题
- 1 VBE编辑器,有时候出现一些问题,比如需要重新关闭一下VBE编辑器再打开才能好
- 2 运行时错误,报错有时候会报错不同行的错。
2 宏的作用
2.1 宏的用处
- 有些代码关键字和参数,用宏录一下,可以看到一些 语法写法
- 录一些不熟悉的操作,看看语法
- 初学时可以用下
2.2 宏的局限性
- 宏只是记录了手动操作EXCEL过程,只能是线性的
- VBA会有程序的非线性语句,如分支判断,如循环,宏都实现不了。
3 一些语法比较琐碎,注意VBE本身的自动大写语法识别功能
- 正确的
- activeworkbook
- activesheet
- 错误的
- actiiveworksheet 是错误的
4 对象集合(复数) 和对象 (对象集合+特定名),和特殊对象
- 对象集合 : Worksheets
- 特定对象 : Worksheets("sheet1")
- 特殊的特定对象 : ActiveSheets
5 要记住你的对象,变量,要取那一层的内容
- 错误 for each sh1 in workbook
- 正确 for each sh1 in worksheets
- 正确 for each sh1 in thisworkbook.worksheets
6 特殊运算符
- 只有VBA里有吧
- Is
- Like
- Xor
7 VBA里写法和EXCEL的区别
- 引用内容的引号特殊写法
- 因为是在vba里,写法要特殊
- sum(a:a) 或 sum("a:a") 错误
- sum(range("a:a")) 正确
- sum(""a:a"") 好像不行,直接报语法错误
8 range("a1:a3").cells(1,1) 其中cells(1,1)是range区域的相对位置
Sub test2()
Range("a3:b5").Interior.ColorIndex = 6
Debug.Print Range("a3:b5").Cells(1, 1).Value
End Sub
9 有时候要严谨点
错误 if a =cells(i,j)
正确 if a= cells(i,j).value '因为cells是对象,a是变量,要对比的是变量和cell里的值
10 EXCEL文件,要操作里面的内容,需要先打开文件才能读取
有的是前台打开;有的是后台打开,不在前台刷新,
同一目录下有aaa bbb两个文件,如果我打开文件aaa,在aaa的VBA窗口中写入 i = Workbooks("aaa.xlsx").Sheets("Sheet1").[a65536].End(xlUp).Row,可以正确运行,如果要得到bbb的行数, i = Workbooks("bbbb.xlsx").Sheets("Sheet1").[a65536].End(xlUp).Row,就会报下标越界。反过来也一样,这是什么问题?
写这种语句必须保证两个工作薄都是打开状态
11 转换为数值的函数
- value()
- int()
- cint()
12 EXCEL的标识符
- 工作表函数的跨表引用 #
- 工作表 分隔符!
13 判断为空的多种方法
在VBA代码中,如果要判断单元格A1是否为空单元格,也可以使用下列方法:
判断为空
- If IsEmpty(Cells(i, 1))
- if xxx="" 比如 Cells(1, 1) = '' 或 Range(“A1”)= ''
- Len(Cells(1, 1)) = 0 或 Len(Range(“A1”))= 0
- Cells(i, 1) = vbNullString 或 Range(“A1”)= vbNullString
- Application.WorksheetFunction.CountBlank(Cells(1,1))
- 为了防止单元格中有空格,可以使用: Len(Trim(Cells(i, 1))) = 0
14 选中多行
- Rows(a).Resize(b+1, 1).EntireRow.Select
- Rows((6 * i - 3) & ":" & (1+6 * i)).Select
15 VBA函数 和 工作表同名函数差别大,实际上是不同函数
- 有同学举例的 asc(11) 和vba里输入asc(11) 分别显示为11和49
- 但实际上VBA里可以调用这两者
Sub test1()
Debug.Print Asc(11)
Debug.Print Application.Asc(11)
End Sub
- 其他例子
- vba.match 对比 application.match
- 等等