【发布时间】:2015-05-14 17:48:13
【问题描述】:
这就是交易...为了克服我对 Excel VBA 中的类模块的恐惧,我决定创建一个数组类,然后添加用于添加元素、对实例进行排序等的函数(方法)。这些是我在普通模块中作为函数/子程序不断重写的东西,但希望使用类可能是向前迈出的一步。
代码模块
Public Type Thing
Name As String
SomeNumber As Double
End Type
类模块
Private pSomething() As Thing
后面是所有常用的公共 LET 和 GET,以及一个用于将新值插入数组的函数。然后我进入排序功能/方法。按 Name 或 SomeNumber 排序没有问题,但到目前为止需要两个函数/方法。我想参数化为单个函数/方法,然后使用可选参数来控制要使用的字段。以下工作,但它似乎有点笨拙
Function SortByField(Optional FieldName As String, Optional SortOrder As vbaSortOrder)
Dim strTemp As Thing
If SortOrder = 0 Then SortOrder = soBottomToTop
If Len(FieldName) = 0 Then FieldName = "Name"
Dim i As Long
Dim j As Long
Dim lngMin As Long
Dim lngMax As Long
lngMin = LBound(pSomething)
lngMax = UBound(pSomething)
For i = lngMin To lngMax - 1
For j = i + 1 To lngMax
If IIf(SortOrder = soBottomToTop, _
IIf(FieldName = "Name", pSomething(i).Name > pSomething(j).Name, _
pSomething(i).SomeNumber > pSomething(j).SomeNumber), _
IIf(FieldName = "Name", pSomething(i).Name < pSomething(j).Name, _
pSomething(i).SomeNumber < pSomething(j).SomeNumber)) _
Then
strTemp = pSomething(i)
pSomething(i) = pSomething(j)
pSomething(j) = strTemp
End If
Next j
Next i
End Function
我想做的是替换以下内容(它在这个愚蠢的 IF(IIF...) 废话的第二部分中是对等的
IIf(FieldName = "Name", pSomething(i).Name > pSomething(j).Name, pSomething(i).SomeNumber > pSomething(j).SomeNumber)
...像这样的东西
"pSomething(i)." & FieldName > "pSomething(j)." & FieldName
直接问题:如何让字符串评估/转换为代码?
间接问题:是否有其他技术可以传入字段名并将其视为字符串以外的其他内容?
在此先感谢您提供的任何帮助、帮助、指导、指导、参考、建议,这是愚蠢的差事或嘲讽的 cmets :)。
【问题讨论】: