vba-类持续更新

一,用途

让代码可读性更强
调用excel对象的一些事件,如程序级事件,内嵌图表事件,菜单命令事件(后续会学)等
封装API,让代码更简捷易懂(后续会学)
创建控件数组
团队协作时,编写完整模块后可以方便队友调用,减少开发时间
  1. property let

作用:生成对象的可写入属性。

Property Let 属性名称(参数)
    语句
End Property

属性名称和参数名称都是自定义的。参数的作用是传递外部信息,是必须的,语句是对传递过来的外部参数进行处理。

2. property Get()

作用:生成对象的可读取属性。

Property Get 属性名称(参数)
   语句         
End Property

3. Property Set

作用:生成子对象。

Property Set 子对象名称(对象)
   语句  
End Property

4. Sub语句

作用:生成方法。

5. Function语句

 

五、使用类模块

使用类,首先要创建一个新的实例。即

dim 变量 as new 类模块名称

创建后,就可以使用该类的对象、方法和属性了。

下面举四个例子:

  1. MyRng类

定义此类有两个属性,红色单元格和绿色单元格。而选了红色单元格属性就是单元格变红,选了绿色单元格属性就是单元格变绿。参数是单元格。

①创建类模块

Option Explicit

Property Set 红色单元格(rng As Range)   '生成可读取属性
  rng.Interior.ColorIndex = 3
End Property

Property Set 绿色单元格(rng As Range)    '生成可读取属性
  rng.Interior.ColorIndex = 4
End Property

②调用

Sub 设置单元格()
  Dim rggg As New MyRng    '定义变量rggg是MyRng类
  Set rggg.红色单元格 = Range("B5")  '把单元格B5划分到rggg类,让B5具有红色单元格属性
  Set rggg.绿色单元格 = Range("B6")  '把单元格B6划分到rggg类,让B5具有绿色单元格属性
End Sub

当你输入rggg.的时候,就会弹出红色单元格和绿色单元格属性供选择,这也是创建类的一个方便之处。而且如果创建了类模块,但没有弹出属性,那就可能是没有创建好类模块了。

 

 

2. 日报表类

定义日报表类的参数是工作表,它的Range("A1:G1")合并,并输入居中标题"营业日报表"

①创建类模块

Property Set 模板(sh As Worksheet)
  sh.Range("A1:G1").Merge
  sh.Range("A1") = "营业日报表"
  sh.Range("A1").HorizontalAlignment = xlCenter
End Property

②调用

Sub 设置模板工作表类模块方法()
Dim shh As New 日报表           '创建一个日报表类的变量
Set shh.模板 = Sheets("sheet2") '把工作表"sheet2"划分为日报表类
End Sub

 

3. 梯形面积类

创建一个类用于计算梯形面积,梯形面积=(上底+下底)*高/2,根据公式,需要三个属性:上底、下底、和高。用参数来传递数值给属性。

①创建类模块

Option Explicit
Dim Shangdi, Xiadi, gao   '设置公共变量去传递到属性的参数,以便后续计算

Property Let 上底(shdi)      '生成可写入属性
  Shangdi = shdi
End Property

Property Let 下底(xdi)      '生成可写入属性
  Xiadi = xdi
End Property

Property Let 高(g)           '生成可写入属性
  gao = g
End Property

Property Get 面积()           '生成可读取属性
  面积 = (Shangdi + Xiadi) * gao / 2
End Property

② 调用

Sub 面积之类模块()
Dim 梯形 As New 梯形面积

With 梯形
    .上底 = 2  '赋值
    .下底 = 3
    .高 = 4
       
    MsgBox "梯形面积:" & .面积

End With

End Sub

 

4. 万能计算器类

创建一个类对数值进行求和、平均数和个数的计算,并输出结果到立即窗口。

①创建类模块

Option Explicit
Dim rng As Range     '设置公共变量,因为计算要用相同区域

Property Set 单元格区域(rg As Range)    '生成可读取属性
  Set rng = rg
End Property

Sub 求和()                               
  Debug.Print "求和:" & Application.Sum(rng)
End Sub

Sub 平均数()
  Debug.Print "平均数:" & Application.Average(rng)
End Sub

Sub 求个数()
  Debug.Print "个数:" & Application.CountA(rng)
End Sub

② 调用

Sub 计算()
Dim 计算 As New 万能计算器

With 计算
    Set .单元格区域 = Sheets("sheet3").Range("a1:a10")
         .求和
         .平均数
         .求个数
End With

End Sub

运行结果

 

六、小结

其实以上的功能直接在模块中写也可以的,但设置了类模块,让代码更简洁、可读性更强了。

来个复习,把上面的日报表和梯形面积的代码在模块中写:

  1. 日报表

语句代码其实和类模块中一致

Sub 设置模板(sh As Worksheet)
  sh.Range("A1:G1").Merge
  sh.Range("A1") = "营业日报表"
  sh.Range("A1").HorizontalAlignment = xlCenter
End Sub

使用的时候,直接调用宏:

Sub 设置模板工作表调用宏方法()
  设置模板 Sheets("sheet2")
End Sub

2. 梯形面积

设置为自定义函数

Function mianji(上底, 下底, 高)
  mianji = (上底 + 下底) * 高 / 2
End Function

使用时调用自定义函数:

Sub 面积之自定义函数()
  MsgBox mianji(2, 3, 4)
End Sub
posted @ 2022-12-06 21:15  vba是最好的语言  阅读(234)  评论(0编辑  收藏  举报