首页 > 其他分享 >vba-类持续更新

vba-类持续更新

时间:2022-12-06 21:22:55浏览次数:29  
标签:vba End Sub 单元格 持续 更新 Range Property 属性

一,用途

让代码可读性更强
调用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

标签:vba,End,Sub,单元格,持续,更新,Range,Property,属性
From: https://www.cnblogs.com/Insist-Y/p/16960585.html

相关文章

  • Hexo&github action持续部署
    目的为了免除日常新建hexonew,hexos,hexog,hexod等繁琐的书写部署流程指令,同时为了更加注重于博客内容本身而不是到新机器重新配置Hexo走一遍部署流程持续集成&持......
  • linux更新系统时间
    问题linux时间和本地时间对不上:linux上的时间为本地实际时间为:解决办法第一步,安装nptdateyuminstall-yntpdate第二步,删除本地的localtime文件并复制上海时......
  • 【开源代码】激光雷达惯性里程计和建图,多LIDAR输入、多尺度,基于面元高效地图更新
    以下内容来自从零开始机器人SLAM知识星球每日更新内容点击领取学习资料→机器人SLAM学习资料大礼包论文##开源代码#SLICT:Multi-inputMulti-scaleSurfel-Based......
  • vba-函数返回sheet
    '打开文件返回SheetPublicFunctionGetSheetByOpenFile()AsWorksheetifilename=Application.GetOpenFilename("Excel(*.xlsx),*.xlsx,Excel(*.xls),*.xls",Fa......
  • 手动更新Eclipse的GWT plugin
    国内TMD好像又给谷歌的pluginonline更新链接给和谐了,试了两天了,从eclipse上无法自动更新GWT的eclipseplugin.今天还好找到官网竟然提供离线现在的zip。一下是转自googl......
  • Uniapp 版本更新(采用离线打包)
    Uniapp版本更新(采用离线打包)其实离线打包方式的版本更新大体上跟云打包方式的版本更新差不多,最主要的差别就是需要后端在离线打包的时候做一些配置,可点击详情链接查看离......
  • [go-每日一库] go-gin项目使用realize实现代码、文件改动热更新
    之前用django编写web应用时,每次保存,django应用都是重新加载-热更新,最近在写gin应用,了解到golang常用的热更新可以用到fresh/gin/gowatch/bee/realize/air等,本文主要分享rea......
  • MyGit:GitHub仓库更新提醒
    GitHub仓库更新提醒工具,微信小程序:MyGit一、解决痛点(需求)1、由于网络问题,想要查询GitHub经常打不开。2、当仓库发布新版本的时候,第一时间知道。3、发现更多有意思的......
  • 问题排查流程——持续⚡️迭代中
    目录​​一、背景介绍​​​​二、过程​​​​三、总结​​​​四、升华​​一、背景介绍在自己还是一个小白的时候(虽然现在也很白......
  • Windows更新Git
    1.打开Git命令行窗口;2.执行如下命令:gitupdate-git-for-windows3.如果报错,尝试在hosts(C:\Windows\System32\drivers\etc)中加入如下内容,我是在https://ip.tool.chin......