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

1 EXCEL对象

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

1.1 MSDN官网资料

 

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.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)

 

参考文档和继续

 

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值