【原创】VBA学习笔记(8) VBA对象的属性,方法,事件

【原创】VBA学习笔记(8) VBA对象的属性,方法,事件

1 EXCEL对象

EXCEL对象逐层级拆解可以分为多层次的对象

1.1 MSDN官网资料

详细见MSDN官网https://docs.microsoft.com/zh-cn/office/vba

1.2 VBE编辑器里,选择对象管理器,也可以打开和查询

2 常用excel对象的属性,方法,事件举例

对象集合 workbooks

对象 workbook,一般都是指各种 excel 对象

属性对象的属性,可能本身也是对象如workbook下的worksheet 是属性也是对象

方法(VBA内置方法)方法是对象的动作,并且需要主动调用

事件(VBA内置事件),事件,是被外在条件激活的,是被动的;而方法,却是主动的。事件,一般只在 workbook, worksheet,等以下的对象层次才有事件是触发性的在VBE里,先选择对象,然后在 事件选择器里 选择事件 后,会自动生成 对应的过程名,不能自己修改

3 工作簿 workbooks

https://docs.microsoft.com/zh-cn/office/vba/api/excel.worksheet.change

3.1 workbooks属性 变量=对象.属性

变量 = 对象.属性需要给变量赋值V1= workbooks.applicationV1= workbooks.countV1= workbooks.creatorV1= 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.addworkbooks.openworkbooks.close '一般情况下,都是同时打开多个sheet 同时关闭的。打开1个workbookworkbooks.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.nameworksheets().indexworksheets().codename

4.3 worksheets 的方法(具体在代码窗口敲了对象worksheet. 看)

EXCEL里没有 worksheet的 open close 这种奇怪操作worksheets.addworksheets.deleteworksheet.active

4.4 worksheets 的事件(具体在VBE里查看)

worksheets.activeworksheets.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.resizeResize(,) 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:xldowncells(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.com/p/f83b298fa34ehttps://docs.microsoft.com/zh-cn/office/vba/api/excel.worksheet.change

相关推荐

T3总账年结步骤

T3总账年结步骤

07-04 💫 5971
新手小白学AD:PCB板层
世界杯历史上十大逆转翻盘(揭秘足球场上的惊天逆袭,)
蛤蜊要煮多久?蛤蜊要煮多长时间才熟透?

本文标签