【发布时间】:2016-03-17 15:58:37
【问题描述】:
我有一个包含 name、id、office 和 officeto 字段的员工集合 (employees)。
我需要在等距的列中打印出这些信息。所以我需要找到最长的字符串名称、office、officeto 的长度...并添加空格以使列等距。
我知道如何使用记录集将字段名称发送到函数中。
所以我的问题是......是否可以通过使用变量(类似于rst![fieldname])来引用类属性(name、office、officeto)。
我尝试将其设置为字段上的记录集循环,但它无法编译。错误是 class.property 未定义。
Public Function PropertyLen(ByVal Property As String, ByRef Employees As colEmployees) As Integer
'This function uses a passed in class property, and returns the len of the longest class property in collection
On Error GoTo ErrorHandler:
Dim Emp As clsEmployee
Dim intLen As Integer
Dim lngCount As Long
For lngCount = 1 To Employees.Count
Set Emp = Employees.Item(lngCount)
If Len(Trim(Emp.Property)) > intLen Then
intLen = Len(Trim(Emp.Property))
End If
Set Emp = Nothing
Next
FieldLen = intLen
ExitFunc:
'clean up
Set Emp = Nothing
Exit Function
ErrorHandler:
modErrorHandler.DisplayUnexpectedError Err.Number, Err.Description
Resume ExitFunc
End Function
【问题讨论】:
-
IMO 你打算实现的只是,比方说,过度的代码灵活性。您可以放置恒定长度,因为该类的属性名称实际上也是硬编码的,并且不能在运行时更改(与您提到的记录集不同)。然后,如果您更改类属性,则必须更改长度数据。作为替代方案 - 在需要动态更改属性的情况下,更好的解决方案是使用字典对象而不是类,它具有
.Keys()和.Items()属性,分别返回数组中键的名称和项值。 -
Omegastripes.. 我只是想澄清一下.. 在我的情况下,我有一组具有 name 属性的员工。我只想找到所有员工中最长的名字。我还需要找到最长的办公室名称。
-
我不想更改该属性的名称。我只是想要t
-
获取值。但我能想到的唯一方法是为名称编写一个单独的方法,为办公室编写一个单独的方法。除了要搜索的属性 id 的名称之外,该代码完全相同。我希望这是有道理的。
-
乍一看不太清楚,现在我已经得到了你需要的东西 - 检查我的答案。