【整理】VBA学习笔记(23)VBA的一些潜规则和备忘

编程语言都是时间杀手,慢慢学慢慢练用中练吧

 

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
  • 等等

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值