VBA基础 - 函数和模块
概要
对于一般的 VBA 程序来说, 可能一个或几个函数就行了. 毕竟, VBA 只是作为 excel 的辅助工具来用的.
但是, 随着 VBA 写的越来越多, 用个工程来管理就有必要了, 而一个代码工程的基础, 就是 函数 和 模块.
函数
VBA 的中的函数有 2 种, 一种是 Sub, 一种是 Function 在 VBA 中, 其实 Sub 叫过程, 不叫函数, 它们的区别有 2 个:
- Function 有返回值, Sub 没有
- Sub 可以直接执行, Function 必须被调用才能执行
Sub 和 Function 的示例如下:
1 Option Explicit
2
3 Sub CallAnotherMod()
4 Dim sum As Integer
5 sum = Add(2, 3)
6 Debug.Print sum
7 End Sub
8
9 Function Add(a As Integer, b As Integer) As Integer
10 Debug.Print a
11 Debug.Print b
12 Add = a + b
13 End Function
注意, 函数的返回值, 是将结果赋值给函数名本身 Add = a + b , 否则返回值一直是 0
模块
模块化的目的是复用, 对于一些通用的功能, 我们可以封装成模块并导出. 这样, 在不同的 VBA 工程中导入已有的模块, 就不用重复的造轮子.
模块的导出很方便, 只要在对应的模块上点击右键, 导出即可, 导出后是一个 *.bas 的文件.
一般模块
一般模块简单明了, 我们之前写的 Sub 或者 Function 其实都在一个默认的一般模块中. 下面的示例工程, 我创建 2 个模块, 分别是 Main 和 MyMath, Main 用来测试, MyMath 中是为了以后复用的函数.
Main 模块:
1 Option Explicit
2
3 Sub CallAnotherMod()
4 Debug.Print "2 + 3 = " & (Add(2, 3))
5 Debug.Print "2 * 3 = " & (Multiply(2, 3))
6
7 End Sub
MyMath 模块:
1 Option Explicit
2
3 Function Add(A As Integer, B As Integer) As Integer
4 Add = A + B
5 End Function
6
7 Function Multiply(A As Integer, B As Integer) As Integer
8 Multiply = A * B
9 End Function
运行 Main 模块, 结果如下:
2 + 3 = 5
2 * 3 = 6
类模块
除了像上面那样通过函数来封装一些功能, VBA 也可以按照类的方式来组织, 熟悉面向对象设计的开发人员可能更喜欢这种方式.
新建一个类模块, 和新建普通模块的步骤一样, 只是新建之前选择的类型是 类模块
比如我们新建一个 MathCls 的类模块:
1 Option Explicit
2
3 ' 常量, class说明
4 Const MathClsName = "math class"
5
6 Dim MathA As Integer
7 Dim MathB As Integer
8
9 ' 相当于其他面向对象语言中的 set 方法
10 Public Property Let A(numA As Integer)
11 MathA = numA
12 End Property
13
14 ' 相当于其他面向对象语言中的 get 方法
15 Public Property Get A() As Integer
16 A = MathA
17 End Property
18
19 ' 相当于其他面向对象语言中的 set 方法
20 Public Property Let B(numB As Integer)
21 MathB = numB
22 End Property
23
24 ' 相当于其他面向对象语言中的 get 方法
25 Public Property Get B() As Integer
26 B = MathB
27 End Property
28
29 Function Add() As Integer
30 Add = MathA + MathB
31 End Function
用来测试的 Main 模块, 这是个普通模块
1 Option Explicit
2
3 Sub CallAnotherMod()
4
5 Dim mc As New MathCls
6 mc.A = 2
7 mc.B = 3
8
9 Debug.Print (mc.Add())
10
11 End Sub
总结
无论采用那种方式来封装, 要看需要封装的功能适合那种方式. 这 2 种方式就像函数式和面向对象编程一样, 没有谁高谁低, 各自有适合的场景.
VBA基础 - 函数和模块的更多相关文章
- python基础,函数,面向对象,模块练习
---恢复内容开始--- python基础,函数,面向对象,模块练习 1,简述python中基本数据类型中表示False的数据有哪些? # [] {} () None 0 2,位和字节的关系? # ...
- Python基础之函数和模块
函数的基本使用 函数的定义:把具有独立功能的代码块组织成一个小模块,在需要的时候调用.或者说,函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数的使用:1.定义函数:2.调用函数 ...
- 零基础学python之函数与模块(附详细的代码和安装发布文件过程)
代码重用——函数与模块 摘要:构建函数,创建模块,安装发布文件,安装pytest和PEP 8插件,确认PEP8兼容性以及纠错 重用代码是构建一个可维护系统的关键. 代码组是Python中对块的叫法. ...
- python基础-----函数/装饰器
函数 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 函数的优点之一是,可以将代码块与主程 ...
- 十八. Python基础(18)常用模块
十八. Python基础(18)常用模块 1 ● 常用模块及其用途 collections模块: 一些扩展的数据类型→Counter, deque, defaultdict, namedtuple, ...
- VBA基础之Excel 工作薄(Book)的操作(三)
三. Excel 工作薄(Book)的操作1. Excel 创建工作薄(Book) Sub addWorkbook() Workbooks.Add End Sub 2. Excel 打开工作薄(Boo ...
- Python基础-包与模块
Python基础-包与模块 写在前面 如非特别说明,下文均基于Python3 摘要 为重用以及更好的维护代码,Python使用了模块与包:一个Python文件就是一个模块,包是组织模块的特殊目录(包含 ...
- Excel VBA基础教程
https://www.w3cschool.cn/excelvba/excelvba-basics.html Excel VBA语言基础 VBA语言的基础认识 详解VBA编程是什么 excel处理录制 ...
- Python学习教程(Python学习视频_Python学些路线):Day06 函数和模块的使用
Python学习教程(Python学习视频_Python学些路线):函数和模块的使用 在讲解本章节的内容之前,我们先来研究一道数学题,请说出下面的方程有多少组正整数解. $$x_1 + x_2 + x ...
随机推荐
- HTML连载43-还原字体和字号、文字界面
一.还原字体和字号 1.利用fireworks切片以及文本添加的功能可以用来定位我们想要的文字是什么字体,行高又是多少,但其实很low,是我们人工挑选出来的. 2.注意点:在企业开发中,如果一个盒子中 ...
- Python ASCII码与字符相互转换
ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和 ...
- kvm与xen虚拟化的比较(转)
Linux虚拟化技术的用户目前有两种免费的开源管理程序可以选择:Xen和KVM. 作为较早出现的虚拟化技术,Xen是“第一类”运行在裸机上的虚拟化管理程序(Hypervisor),也是当前相当一部分商 ...
- spring cloud 2.x版本 Sleuth+Zipkin分布式链路追踪
前言 本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 本文基于前两篇文章eureka-server.eureka-client.eureka ...
- PHP 7.4.0 发布
近日,PHP 7.4.0 发布了,此版本标志着 PHP 7 系列的第四次特性更新. PHP 7.4.0 进行了许多改进,并带来了一些新特性,包括: Typed Properties 类型属性 类属性 ...
- 前端 用http-server启动本地服务器
附:http-server详细介绍,包括参数等: https://www.npmjs.com/package/http-server 开始: 准备node.js环境: 在我的博文“ Vue.js学 ...
- 【Linux命令】常用系统工作命令11个(echo、date、reboot、poweroff、wget、ps、top、pidof、kill、killall、pkill)
目录 echo命令 date命令 reboot命令 poweroff命令 wget命令 ps命令 top命令 pidof命令 kill命令 killall命令 pkill命令 一.echo命令 ech ...
- njnja 安装
git clone git://github.com/ninja-build/ninja.git && cd ninja 安装re2c wget https://kojipkgs.f ...
- wpf file embeded resource is readonly,Copy always will copy the file and its folder to the bin folder
Wpf file embeded resource will compile the file into the assembly and it will be readonly and can no ...
- 利用Python突破验证码限制
一.实验说明 本实验将通过一个简单的例子来讲解破解验证码的原理,将学习和实践以下知识点: Python基本知识 PIL模块的使用 二.实验内容 安装 pillow(PIL)库: $ sudo apt- ...