VBA 关于applcaiton对象的特例用法,activecell 只能单独使用,只有activesheet 但没有activeworksheet
a VBA对象application下的各种对象用法特例很多,得小心
1.1 我现在对VBA的了解水平,这方面只能写成这样,这里写的内容肯定是有问题的,没办法,边走边学把
- VBA里特例太多,真的挺坑的
- 但是需要使用excel的人真的没办法,必须用这个
- applcaiton对象,workbook对象,sheet对象,worksheet对象,range对象 ,cell对象的各种特例!
a.0 特例简单总结
- 只有 thisworkbook
- 只有activesheet 没有 activeworksheet
- activecell需要单独使用
a.1 VBA对象下的方法和属性
- 在VBA里编辑的时候
- 注意 vbe 输入对象的时候,自动显示的属性 和 方法
- 但也有特例,比如 activesheet 因为是 object 对象,而不是range对象, 输入activesheet. 后面不会自动显示属性和方法
- 再比如,后期绑定的字典 输入 dictionary. 后面也不会显示对应的方法和属性
a.2 VBA对象浏览器
- 虽然看起来很复杂,需要用的时候,还只能依赖这个,虽然我查到的一些 对象管理器里有,在代码窗口输入会报错的问题
- 暂时不是很明白
- 但是有些对象的属性和方法并不多,还是比较清晰的
- 总之,这几个官方的 包括 F1 都是重要依据

a.3 VBE里可以看到的几个库
- 不常用库
- office库
- excel库
- 常用库
- VBA. 库 'vba. 函数?
- VBA.project 库 '日常excel对象里管理的 wb, sh等所有资源的库,最常用
- msforms ' 各种form 库
- scripting '(字典等所在的库)

1 EXCEL(一般情况下,少用excel.)
1.1 application 不是等价于 excel,Excel是库,Application是类
- Excel是库
- Application是类
- application是 excel的成员

Sub test_sh3()
Debug.Print Application.Name
Debug.Print Excel.Application.Name
'Debug.Print Excel.Name '报错
End Sub
1.2 excel 也有不少自身的. 属性 .方法
输入excel. 后面可用的属性和方法和 application 好像差不多

1.3 其他如 office 库,暂时也不用深究

2 Application (一般情况下,少用application. 用缺省的就行)
2.1 application的特点

2.2 application的属性和方法
- application.name
- application.activecell()
- application.activechart)

3 VBA.
3.1 VBA.下属的方法和属性
- Vba 代码中的函数,默认是VBA. 下的,缺省写就可以
- 而如果要调用工作表函数,需要用 application.worksheet.match() 和 application.match()

3.2 各种函数
- vba.match 等价于 match
- application.worksheetfunction.match 等价于 worksheetfunction.match
- application.match ( 和 worksheetfunction.match 这是有区别的)
--------------------------------------------------------------------------------------------------------------------------------
总结
一般情况下,少用excel.
一般情况下,少用application. 比如worksheets 就省略 application.worksheet ,少数地方必须用application.match 必须带
一般情况下,少用VBA. 默认 match 就是 vba.match 了解就行
这些特别大的 库,类,都没什么用,用缺省的写法感觉更简单、
-------------------------------------------------------------------------------------------------------------------------------
4 workbooks (workbook对象的集合,也就是workbook的类class)
正确
4.1 workbooks 是excel库下面的成员


4.2 具体用法
- workbooks 这几种都可以
- 等价于 Application.workbooks (这种情况下,application 少用)
- 等价于 excel.workbooks (少用excel. 没啥意义)
- 等价于 Excel.Application.Workbooks.Count (少用excel. 没啥意义)
Sub test551()
Debug.Print Excel.Application.Workbooks.Count
Debug.Print Excel.Workbooks.Count
Debug.Print Workbooks.Count
End Sub

5 workbook (也是excel下属的 class)
5.1 workbook

5.2 workbook的用法?
- workbooks("")
- 特定workbook的用法
5.3 特定workbook
正确
- thisworkbook
- activeworkbook
![]()
5.4 一个特别的用法( 没懂原理)
可以借助对象变量
Dim ws As Worksheet
If TypeName(ActiveSheet) = "Worksheet" Then Set ws = ActiveSheet
然后输入 ws. 自动列出成员
6 sheets (大于 worksheets,包含 worksheet chart 等等各种)
6.1 sheets 也是excel下的 class

7 worksheets (excel下属的class)


8 sheet
正确
- activesheet
- 因为 activesheet 不是 range,是对象,输入 activesheet. 后面是不会自动显示 属性,方法的

转化为变量后,输入 变量. 可以自动列出 对象和方法
Sub test1002()
Dim sh1 As Worksheet
Set sh1 = ActiveSheet
' 然后输入 sh1. 就可以了
End Sub

错误
- activeworksheet 没这种写法
- thissheet 代码都是保存在工作簿的,整理保存,不是保存在sheet里的
- sheet.save 工作簿都是整体保存的,不存在单独保存sheet
9 worksheet
workbook.worksheets()


下面这个好奇怪,怎么还有 range 下的worksheet

正确
错误
- activeworksheet
- thisworksheet
Sub test551()
Debug.Print ActiveSheet.Name
'Debug.Print ActiveworkSheet.Name ' 错误
End Sub
10 range
10.1一般区域 rang
![]()
10.2 特定区域
usedrange
11 selection
- selection 是比较宽泛的对象 object
- 可能是 cell rang
- 还可能是 worksheet 图表chart等

12 cells()
cells相关用法
- cells()
- activesheet.cells(1,1)
13 cell 特定cell
13.1 activecell
- activecell 只能单独使用
- 虽然确实其 parent 对象是 worksheet

正确
- activecell.value
错误
- activeworkbook.activesheet.activecell()
- activesheet.activecell()
- worksheets("sheet1").activecell()
测试代码
Sub test551()
Debug.Print ActiveCell.Parent.Name
Debug.Print ActiveCell.Parent.Parent.Name
Debug.Print ActiveCell.Parent.Parent.Parent.Name
Debug.Print ActiveCell
Debug.Print Sheet3.ActiveCell '虽然sheet3是其parent但是 activecell只能单独使用
Debug.Print Worksheets("sheet3").ActiveCell '虽然sheet3是其parent但是 activecell只能单独使用
End Sub

更多推荐

所有评论(0)