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"来引用对象属性?
我相信你想使用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)