1 EXCEL对象
- EXCEL对象逐层级拆解可以分为多层次的对象
1.1 MSDN官网资料
- 详细见MSDN官网
- https://docs.microsoft/zh-cn/office/vba
1.2 VBE编辑器里,选择对象管理器,也可以打开和查询
2 常用excel对象的属性,方法,事件举例
- 对象集合 workbooks
- 对象 workbook,一般都是指各种 excel 对象
- 属性
- 对象的属性,可能本身也是对象
- 如workbook下的worksheet 是属性也是对象
- 方法(VBA内置方法)
- 方法是对象的动作,并且需要主动调用
- 事件(VBA内置事件),事件,是被外在条件激活的,是被动的;而方法,却是主动的。
- 事件,一般只在 workbook, worksheet,等以下的对象层次才有
- 事件是触发性的
- 在VBE里,先选择对象,然后在 事件选择器里 选择事件 后,会自动生成 对应的过程名,不能自己修改
3 工作簿 workbooks
https://docs.microsoft/zh-cn/office/vba/api/excel.worksheet.change
3.1 workbooks属性 变量=对象.属性
- 变量 = 对象.属性
- 需要给变量赋值
- V1= workbooks.application
- V1= workbooks.count
- V1= workbooks.creator
- V1= workbooks.item() '定义为wb 对象
- V1= 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 '一般情况下,都是同时打开多个sheet 同时关闭的。打开1个workbook
- 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
4 工作表 worksheets
- worksheets的事件,方法,属性都特别多
4.2 worksheet 的属性(具体在代码窗口敲了对象worksheet. 看)
- worksheets().name 或worksheet1.name
- worksheets().index
- worksheets().codename
4.3 worksheets 的方法(具体在代码窗口敲了对象worksheet. 看)
- EXCEL里没有 worksheet的 open close 这种奇怪操作
- worksheets.add
- worksheets.delete
- worksheet.active
4.4 worksheets 的事件(具体在VBE里查看)
- worksheets.active
- worksheets.change
5 表 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
6 range 和 cells(一般 range 和 cells是等价的)
6.1 属性
- range.value ----返回或设置单元格中的值
- range.formula ---返回或设置 A1 样式表示法和宏语言中的对象的公式。String 类型,可读写。
- range.font ---返回一个font对象,可以设置字体的特征
- range.interior. 设置背景
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 '只能向左边或上面整体移动
- 不带参数时,默认参数先是 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里查看)
range或 cells有事件吗?
7 属性的两种写法格式
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)
参考文档和继续
- https://www.jianshu/p/f83b298fa34e
- https://docs.microsoft/zh-cn/office/vba/api/excel.worksheet.change
更多推荐
【原创】VBA学习笔记(8) VBA对象的属性,方法,事件
发布评论