vba - 在 VBA 中,如何比较用户定义类型 (UDT) 的 2 个实例?我收到类型不匹配
问题描述
我有一个定义 UDT 的模块,如下所示:
Private Type UserData
uName As String 'user name
uDate As Date 'date/time of last interaction
End Type
我有一个简单的测试函数,我试图用它来比较 UDT 的两个不同实例,如下所示:
Sub TestCheck()
Dim testRec(1) As UserData
testRec(0).uName = "a"
testRec(0).uDate = Date
testRec(1) = testRec(0)
If testRec(1) = testRec(0) Then
Debug.Print "Records match"
Else
Debug.Print "Records don't match"
End If
End Sub
我收到编译错误:testRec(1) = testRec(0) 上的类型不匹配
我真的宁愿不必遍历每个实例的每个成员来检查等效性。UDT 不应该充当变量吗?如果我必须遍历每个实例的每个成员来比较它们,那么使用 UDT 并没有为我节省任何东西。有没有办法在不循环成员的情况下进行比较?
解决方案
对于任何有相同问题的人,根据 Brian M Stafford 的评论,简单的答案是否定的。
但是,这里有一个简单的函数来完成工作:
Private Function UserDataEqual(ByRef varA As UserData, ByRef varB As UserData) As Boolean
If varA.uName = varB.uName _
And varA.uDate = varB.uDate Then
UserDataEqual = True
Else
UserDataEqual = False
End If
End Function
它将按如下方式使用:
Sub TestCheck()
Dim testRec(1) As UserData
testRec(0).uName = "a"
testRec(0).uDate = Date
testRec(1) = testRec(0)
If UserDataEqual(testRec(1), testRec(0)) Then
Debug.Print "Records match"
Else
Debug.Print "Records don't match"
End If
End Sub
感谢您回答我的问题布赖恩。
推荐阅读
- mysql - 当数组中的json对象数量未知时,如何从mysql文本列中提取json数组作为表?
- android - 反应原生 - 找不到builder.jar(com.android.tools.build:builder:3.1.4)
- python - 如何将嵌套列表转换为数据框?
- php - Laravel 数据库无法在本地系统上使用 xampp
- python - 计算字符串中字母的频率(Python)
- c - 如何可移植地将双数据类型写入 C 中的文件
- sql - 创建和连接临时表
- react-native - 使用 Expo 响应导航 v3.x 和推送通知侦听器
- jquery - 反应重定向帖子
- r - 如何使用不同/相同的变量正确地从宽格式移动到长格式