Re: [VBA ] VBA 如何陣列排序??

看板Visual_Basic作者 (喲)時間14年前 (2012/02/29 21:46), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《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)

02/29 22:29, , 1F
哦哦,我看錯了,以為是寫VB6. VBA則不會有class module可用.
02/29 22:29, 1F

03/02 00:19, , 2F
我所遇到的就是您最後一行所寫的variant互轉的錯誤情況,
03/02 00:19, 2F

03/02 00:20, , 3F
但是我不知道要如何將錯誤排除 >.<
03/02 00:20, 3F

03/02 00:39, , 4F
如果VBA也可以寫Class,就把AocOut Type改成Class即可解決.
03/02 00:39, 4F
文章代碼(AID): #1FJYm-PB (Visual_Basic)
文章代碼(AID): #1FJYm-PB (Visual_Basic)