工作中有时候会用到VBA(Visual Basic for Applications),不是很多,也没有专门去学习VBA,用的时候遇到问题就上网去查资料,解决问题了就放下了。
今天被同事问到VBA中类的用法,我从来没有用过,就在网上查了资料,了解一些用法,也算对VBA多了一点认识。
在查资料的时候看到implments单词,就是实现的意思,觉得很奇怪,难道VBA中的类还有其他的用法?
VBA中不支持定义接口的数据类型,所以如果想要实现面向接口编程需要使用它独有的方式,为了掌握这一点,我在CSDN、博客园、B站、百度上搜资料,不理想,整整折腾了一下午的时间,反复试错和纠错。
好在解决了。
1、使用类来定义接口
使用类来定义接口的时候,可以定义函数或者方法,里面不能有实现代码。
就像下面的代码(类的名称为I接口):
Option Explicit
Public Function func() As String
End Function
Public Sub procedure()
End Sub
2、接口类的实现
使用Implements 父类名称
必须对类的所有声明写上实现,函数名和过程名要遵循“父类名称_类中定义的函数名”或者“父类名称_类中定义的过程名”。
可以再自行定义其他的函数、方法、属性等。
就像下面的代码(实现的类基于I接口):
Option Explicit
Implements I接口
Public Function func() As String
func = "类1自己的函数"
End Function
Public Sub procedure()
Debug.Print "类1自己的过程"
End Sub
Public Function I接口_func() As String
I接口_func = "I接口_func1"
End Function
Public Sub I接口_procedure()
Debug.Print "I接口_procedure1"
End Sub
3、测试VBA的面向接口编程
Option Explicit
Sub test()
Dim P1 As C类1
Set P1 = New C类1
Dim P2 As C类2
Set P2 = New C类2
Debug.Print P1.I接口_func
P1.I接口_procedure
Debug.Print P1.func
P1.procedure
Debug.Print "----------------------------------------"
Debug.Print P2.I接口_func
P2.I接口_procedure
Debug.Print P2.func
P2.procedure
Debug.Print "----------------------------------------"
Dim Q1 As I接口
Set Q1 = New I接口
Set Q1 = P1
Debug.Print Q1.func
Q1.procedure
Debug.Print "----------------------------------------"
Set Q1 = P2
Debug.Print Q1.func
Q1.procedure
End Sub
输出结果:
I接口_func1
I接口_procedure1
类1自己的函数
类1自己的过程
----------------------------------------
I接口_func2
I接口_procedure2
类2自己的函数
类2自己的过程
----------------------------------------
I接口_func1
I接口_procedure1
----------------------------------------
I接口_func2
I接口_procedure2
有了这些知识,感觉VBA一下子就了一点灵气。