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

时间:2014-09-05 17:58:34

标签: excel vba excel-vba object

我正在尝试编写一个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”来引用对象属性?

1 个答案:

答案 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