欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-03 18:26:04
...

 

参考文档和继续

 

 

一  特殊方法?(EXCEL对象之外的)

  • DEBUG算啥?对象?模块? 还是特殊的
  • 应该算是模块/类?把,模块也有方法
  • debug
  • debug.print
  • debug.asset

 

 

二 常用excel对象的属性,方法,事件

2.1 EXCEL对象下的属性,方法

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

2.2 对象的属性,方法,事件

  • 对象集合 workbooks
  • 对象       workbook,一般都是指各种 excel  对象

 

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

 

  • 方法(VBA内置方法)
  • 方法是对象的动作,并且需要主动执行

 

  • 事件(VBA内置事件)
  • 事件,一般只在 workbook, worksheet,等以下的对象层次才有
  • 事件是触发性的
  • 在VBE里,先选择对象,然后在 事件选择器里 选择事件 后,会自动生成 对应的过程名,不能自己修改

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

 

 

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

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

 

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

 

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

 

 

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的事件,方法,属性都特别多

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

 

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

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

 

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