作者yauhh (哟)
看板Visual_Basic
标题Re: [VBA ] VBA 如何阵列排序??
时间Wed Feb 29 21:46:35 2012
※ 引述《evantw (安安小成)》之铭言:
: Private Type AocOut
: OEM As String
: Su_NO As String
: In_Pcs As Long
: Ck_Pcs As Long
: Out_Pcs As Long
: End Type
: 如何将阵列中依序 Su_No 及 In_Pcs 来做从小排序到大呢??
二个层次的排序就是先用第一个排列,在符合第一个排列次序前提下要用第二个排列.
气泡排序法最中间会看到一段码长这样:
If a(i) < a(j) Then Call Swap(a, i, j)
而快速排序法靠外面也会看到一段类似的码
If a(i) < a(j) Then
leftPart.add a(i)
Else
rightPart.add a(i)
End If
现在 a(i) < a(j) 这种比较式要改成抽象的 before(a(i), a(j)),
然後就可以自己定义什麽叫作before. before的定义应该是:
Function before(a As AocOut, b As AocOut) As Boolean
If a.Su_NO < b.Su_NO Then
before = True
ElseIf a.Su_NO = b.Su_NO and a.In_Pcs < b.In_Pcs then
before = True
Else
before = False
End If
End Function
然後你可能会在参数部份遇到障碍,说UDF无法和variant互转之类的错误.
此时只要把Type AocOut改成class module即可.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.231.66.119
※ 编辑: yauhh 来自: 61.231.66.119 (02/29 21:50)
1F:→ yauhh:哦哦,我看错了,以为是写VB6. VBA则不会有class module可用. 02/29 22:29
2F:推 evantw:我所遇到的就是您最後一行所写的variant互转的错误情况, 03/02 00:19
3F:→ evantw:但是我不知道要如何将错误排除 >.< 03/02 00:20
4F:→ yauhh:如果VBA也可以写Class,就把AocOut Type改成Class即可解决. 03/02 00:39