gpt4 book ai didi

arrays - 以字段名作为参数的 VBA 数组排序

转载 作者:行者123 更新时间:2023-12-04 21:37:50 27 4
gpt4 key购买 nike

这是交易...为了克服我对 Excel VBA 中的类模块的恐惧,我决定创建一个数组类,然后添加用于添加元素、对实例进行排序等的函数(方法)。这些是东西我不断在普通模块中重写为函数/子,但希望使用类可能是向前迈出的一步。

代码模块

Public Type Thing
Name As String
SomeNumber As Double
End Type

类模块
Private pSomething() As Thing

随后是所有常用的公共(public) 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

直接问题:如何让字符串评估/转换为代码?

间接问题:是否有其他技术可以传入字段名并将其视为字符串以外的其他内容?

在此先感谢您提供的任何帮助、帮助、指导、指导、引用、建议这是愚蠢的差事或讽刺性评论:)。

最佳答案

比格顿,
我试图遵循你的代码,你是对的,嵌套的 IIF 是愚蠢的。我可以建议您使用 SELECT CASE 语句重写代码吗?这可能有点帮助。
此外,您要实现的大目标是什么?对于一维数组,这几乎看起来有点矫枉过正。
您可能还可以利用其他内置的 Excel VBA 方法。
我刚刚在互联网上快速搜索了排序数组,发现了 Pearson 的网站 http://www.cpearson.com/excel/SortingArrays.aspx
你可能要检查一下。

关于arrays - 以字段名作为参数的 VBA 数组排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30243966/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com