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

 

 

 

更多推荐