网站首页 > 技术文章 正文
相信大家在看过VBA快速入门之后,对VBA有了一定的了解,在此基础上,本篇文章想分享一下VBA在实操方面的内容,并在最后会给出参考资料,供大家进一步研究。
VBA中子过程、函数、数组
子过程
子过程的含义是一些语句的集合,并且没有返回值。之前说过的宏,在VBA中就表现为一个子过程,所以子过程和宏的意义很相似,也就是对某一功能的封装,后续如果还需要此功能,只需要简单的调用子过程名称就OK了,不用再重复的写该功能对应的全部语句了。子过程在VBA的关键字为Sub,完整语法如下,其中方括号("[]")表示内容可选,竖线("|")表示多个中选择一个。
子过程的一个实例如下,说明,VBA中注释用单引号表示。
函数
VBA函数是指执行计算并返回结果的过程,这句话就点名在VBA中函数与过程的区别与联系,核心区别是函数有返回值,子过程没有返回值,可以在VBA代码或者工作表中使用函数,函数的完整语法如下,乍一看觉得挺复杂,其实不难,因为函数需要返回值,所以就有 As Type 来指明返回值类型,还有函数具体要返回哪个值呢?又没有return语句,所以就需要函数名来当作返回的值了。
函数的一个实例及引用如下:
数组
数组是一组同类元素,使用数组名来标识,使用数组名和一个下标可以引用数组中的某个特定元素,数组在VBA中的申明如下,在默认情况下,VBA数组的下标从0开始,即当开始下标和To省略后,数组下标从0开始。
动态数组没有提供元素的数目,因此,在声明动态数组时应使用一组空括号,在使用之前,需要使用ReDim语句来说明VBA动态数组中包含多少个元素。
VBA对象和方法的引用
VBA中对象的引用格式为对象名.属性名,同样的,在VBA中方法的引用方式为对象名.方法名,可以这样来理解,当我们叫一个人时,是不是也是姓名的xxx。例如 小明的头发、小明的衣服……,请看示例。
上述示例比较有代表性,大家在看的过程中有不理解的地方欢迎留言讨论,我简单总结一下。
- 以后出现多个点的情况,请从左到右逐个分析,出现这种情况的原因是对象的属性也可能是另外一个对象。那该如何识别对象呢?直观的考虑是除了基本数据类型外,其余都是对象。
- 带名称的参数含义明确,且参数之间顺序可以任意,不带名称的参数,参数含义严格与函数/过程定义时的保持一致,例如Offset(2,3)不等于Offset(3,2)
- 对象变量的赋值使用关键字Set。
事件
在Excel中,事件是指会话中发生的动作。对于Excel中的对象而言,发生的任何事情都要通过事件,例如,打开工作簿、双击单元格、改变单元格的值。当某一个具体事件发生时,就是要告诉Excel要运行某个宏或某段代码,即事件处理函数。可以这样来理解,事件发生了,当然需要来处理啦。在Excel中,事件可以分为以下几类。
- 工作簿事件:某个具体的工作簿发生的事件,例如open事件(打开或者新建),NewSheet事件(添加新工作表)
- 工作表事件:某个具体的工作表发生的事件,例如Change事件(修改工作表山的某个单元格)
- 图表事件:某个具体的图表发生的事件,例如Select事件
- 应用程序事件:Excel应用程序发生的事件,包括NewWorkbook事件(新建一个工作簿)
- 用户窗体事件:具体的窗体中发生的事件。例如Click事件。
- 与对象无关的事件:例如Ontime事件和Onkey事件。
事件处理程序必须放置在正确的位置,才能生效。工作簿级别事件的代码应该放在ThisWorkbook代码模块中,工作表级别事件的代码应该放在特定工作表的代码模块中,例如Sheet1。每一个事件事件处理程序都有一个预先确定的名称,例如Workbook_Open。
以下实例的功能是每当Excel文件代开后会显示问候语,小伙伴们赶紧试试吧。
编程小技巧
- 使用Not关键字来切换布尔类型的属性值。
- 不清楚某个对象到底有哪些属性和方法,可以选中该对象,然后按F1,系统会自动跳转到帮助页面,很推荐。
好了,本次的介绍就到这儿,如果你在读的过程中有什么疑问或者建议,欢迎留言讨论;如果觉得有帮助,麻烦点赞支持,谢谢。
最后说明:因为头条对markdown支持不是很完整,代码支持的可读性很差,所以文中代码部分我使用了截图,需要源代码的麻烦关注一下我的微信公众号“码上有效率”,或者扫下面的二维码,谢谢关注。
参考文章
- https://docs.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/sub-statement
- https://docs.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/function-statement
- https://wenku.baidu.com/view/ce900524b9f3f90f77c61b84.html
猜你喜欢
- 2024-09-21 看我如何把NIO拉下神坛(将你拉下神坛)
- 2024-09-21 一篇文章搞懂 Python select 模块
- 2024-09-21 分享测试环境中一条sql拖垮整个数据库的解决思路
- 2024-09-21 Java nio 空轮询bug到底是什么(netty 空轮询)
- 2024-09-21 澳洲最大杏仁生产商Select Harvests旗下站点发生火灾事件
- 2024-09-21 给layui select元素的下拉选项增加title提示
- 2024-09-21 湾岸传说|起底大阪湾岸最速车队(大阪湾地理位置)
- 2024-09-21 你知道什么是Select函数吗?(select()函数)
- 2024-09-21 H5 事件(h5事件前端侧边滑动返回)
- 2024-09-21 Unity自定义inspector样式(unity生成设置)
- 1514℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 569℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 510℃MySQL service启动脚本浅析(r12笔记第59天)
- 486℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 485℃启用MySQL查询缓存(mysql8.0查询缓存)
- 467℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 446℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 444℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)