首页 > 解决方案 > 在 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 并没有为我节省任何东西。有没有办法在不循环成员的情况下进行比较?

标签: vbauser-defined-typestype-mismatch

解决方案


对于任何有相同问题的人,根据 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

感谢您回答我的问题布赖恩。


推荐阅读