我正在尝试编写一个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
我遇到的问题是编译器正在寻找t的“f”属性而不是t的value-of-f属性。上面的代码块中注释了确切的错误。如何使用f的值而不是“f”来引用对象属性?
答案 0 :(得分:8)
我相信你想使用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