【原创】VBA学习笔记(9) VBA对象的 属性,方法,事件
参考文档和继续
- https://www.jianshu.com/p/f83b298fa34e
- https://docs.microsoft.com/zh-cn/office/vba/api/excel.worksheet.change
一 特殊方法?(EXCEL对象之外的)
- DEBUG算啥?对象?模块? 还是特殊的
- 应该算是模块/类?把,模块也有方法
- debug
- debug.print
- debug.asset
二 常用excel对象的属性,方法,事件
2.1 EXCEL对象下的属性,方法
2.2 对象的属性,方法,事件
- 对象集合 workbooks
- 对象 workbook,一般都是指各种 excel 对象
- 属性
- 对象的属性,可能本身也是对象
- 如workbook下的worksheet 是属性也是对象
- 方法(VBA内置方法)
- 方法是对象的动作,并且需要主动执行
- 事件(VBA内置事件)
- 事件,一般只在 workbook, worksheet,等以下的对象层次才有
- 事件是触发性的
- 在VBE里,先选择对象,然后在 事件选择器里 选择事件 后,会自动生成 对应的过程名,不能自己修改
2.3 事件和方法的区别
https://zhidao.baidu.com/question/43618687.html
1、事件,是被外在条件**的,是被动的;而方法,却是主动的。
所以我们在写VB程序时不需要关心事件怎么被VB的事件管理器**,只需要关心,在什么条件下被**,就可以了;
而方法要由我们主动的在代码中写出在什么地方调用,比如上例中的"me.打人(说话人)",如果不主动调用,就不会发生。
2、事件,中要写代码;方法,系统自己定义代码。
事件中如果不写代码,那么这个事件就和没发生一样;
方法,系统自己内部定义了代码,不需要自己修改,但是可能通过传送参数,改变方法执行的效果,比如"me.打人(说话人)",如果,你不传一个参数,就不知道要打谁。
三 workbooks
从这里开始,需要对着官方手册看
https://docs.microsoft.com/zh-cn/office/vba/api/excel.worksheet.change
3.1 workbooks属性
- workbooks.application
- workbooks.count
- workbooks.creator
- workbooks.item
- workbooks.parent
Sub t7()
Debug.Print Workbooks.Application '很显然是excel
Debug.Print Workbooks.Count '这是你现在已经打开的 EXCEL表
Debug.Print Workbooks.Creator '?
Set a = Workbooks.Item("cs11.xlsm") '对对象的赋值,赋值后也是对象
Debug.Print a.Name '这里不能debug.print a
rem 直接这样不行,必须先定义为对象! Debug.Print Workbooks.Item(cs11.xlsm).Name
rem set a as object
Debug.Print Workbooks.Parent '很显然也是excel
End Sub
3.2 workbooks方法
- workbooks.add
- workbooks.open
- workbooks.close
- workbooks.checkout
- workbooks.opentext '用来打开txt文件
- 还有很多
Sub t7()
Rem Workbooks.Add ("cs100.xlsm") '默认会去,默认路径去找文件做为范本,可以改路径把? C:\Users\pc\Documents
Workbooks.Add '不能带括号 workbooks.add()是错误的
Workbooks.Add (xlWBATWorksheet) '有几种参数
End Sub
Sub t7()
Rem Workbooks.Open "cs100.xlsm" '语法要求必须"" workbooks.open()这样不行!并且有1堆复杂参数
Rem Workbooks.Close '必须全部关闭,不能只关闭特定表?
Workbooks.OpenText "cs100.txt" '打开txt文件
End Sub
四 worksheets
- worksheets的事件,方法,属性都特别多
4.2 worksheet 的属性(具体在代码窗口敲了对象worksheet. 看)
- worksheets().name 或worksheet1.name
- worksheets().index
- worksheets().codename
4.3 worksheets 的方法(具体在代码窗口敲了对象worksheet. 看)
- worksheets.add
- worksheets.delete
- worksheet.active
00
4.4 worksheets 的事件(具体在VBE里查看)
- worksheets.active
- worksheets.change
五 sheets
- sheets 包括 worksheets charts window 等等?
- 这3种写法是等效的
Sub test1002()
Debug.Print Sheet1.Name
Debug.Print Sheet1.Index
Debug.Print Sheet1.CodeName & vbCrLf
Debug.Print Sheets(1).Name
Debug.Print Sheets(1).Index
Debug.Print Sheets(1).CodeName & vbCrLf
Debug.Print Sheets("range").Name
Debug.Print Sheets("range").Index
Debug.Print Sheets("range").CodeName & vbCrLf
End Sub
range
1
Sheet1
range
1
Sheet1
range
1
Sheet1
六 range 和 cells
6.1 属性 (具体在代码窗口敲了对象worksheet. 看)
range.value ----返回或设置单元格中的值
range.formula ---返回或设置 A1 样式表示法和宏语言中的对象的公式。String 类型,可读写。
range.font ---返回一个font对象,可以设置字体的特征
6.2 方法 (具体在代码窗口敲了对象worksheet. 看)
range.select ----选中单元格
range.clear ----清楚单元格中的值
range.copy ----复制单元格中的值
range.resize----重新设置区域大小
range.offset----偏移 (cells/range 会整体偏移) 是根据当前range偏移 找另外一个区域
range.delete 删除
6.3 具体方法介绍
range.resize
Resize(,) resize(:=rows,:=columns)
range.offset()
Cells().offset(4,0)
Range().offset(4,0) 是根据当前range偏移 找另外一个区域
cells(3,3).delete
- cells(3,3).delete
- 不带参数时,默认参数先是 xlup,如果下方无内容,则默认参数为xltoleft
- 或者指定参数
- cells(3,3).delete(xlup )
- cells(3,3).delete(xltoleft )
- 但是下面2种写法是错误的
- cells(3,3).delete shift:xldown 或者 cells(3,3).delete(xldown )
- cells(3,3).delete shift:xltoright 或者 cells(3,3).delete(xltoright)
- delete 方法执行的时候
- 居然是先删除下方的有值的单元格,逐个删除
- 然后删除右边的有值得单元格,逐个删除
- 可以试试 cells(3,3).delete 就可以看到这个奇妙现象。。。。。。。。。。
- 所以我理解了,为啥这几个会报错
- cells(3,3).delete shift:xldown
- cells(3,3).delete shift:xltoright
- 因为单元格总是基于设定在左上角的规则,所以只能是 右边的所有单元格往左移动,或者下面往上移动
- 所以只有 shift:=xlup 和 上 shift:= xltoleft 好用
6.3 事件 (具体在VBE里查看)
七 属性的两种写法格式
7.1 与其他语言的区别:属性的特殊写法
- 属性:= 属性值
- 而其他语言一般写法就是 =
7.2 VBA本身属性有两种写法 (可能有问题)
方法(参数)
方法 空格 参数
举例 cells().delete(xlup)
- cells(3,3).delete shift:xlup 或者 cells(3,3).delete(xlup)
- cells(3,3).delete shift:xltoleft 或者 cells(3,3).delete(xltoleft)