如何在VBA中动态引用对象属性

T6J*_*2E5 3 excel vba object excel-vba

我正在尝试编写一个VBA函数,该函数根据对象属性之一的值计算集合中的对象.我需要将被检查的对象属性设置为动态的,由函数参数提供.我可以使用一个if then语句,但是这将有许多elseif条款,每个条款都有相同的过程,除了属性名称.

我想避免为每个属性名称反复重复我的代码.这是我到目前为止所拥有的.

Private Function getTicketCount(c As Collection, f As String, s As String) _
 As Long
' @param c: collection of Ticket objects.
' @param f: property to filter.
' @param s: filter string.
'
' Function returns number of tickets that pass the filter.

Dim x As Long
Dim t As Ticket

x = 0

For Each t In c
    If t.f = s Then x = x + 1 ' Compiler throws "Method or data member not found."
Next t

getTicketCount = x
End Function
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是编译器正在寻找t的"f"属性而不是t的value-of-f属性.上面的代码块中注释了确切的错误.如何使用f的值而不是"f"来引用对象属性?

Sor*_*eri 9

我相信你想使用CallByName方法CallByName MSDN Link

Private Function getTicketCount(c As Collection, f As String, s As String) _
 As Long
' @param c: collection of Ticket objects.
' @param f: property to filter.
' @param s: filter string.
'
' Function returns number of tickets that pass the filter.

Dim x As Long
Dim t As Ticket

x = 0

For Each t In c
    If CallByName(t, f, VbGet) = s Then x = x + 1 ' Compiler throws "Method or data member not found."
Next t

getTicketCount = x
End Function
Run Code Online (Sandbox Code Playgroud)