2013-04-12 31 views
2

我想對從單元格A40開始,以A46結尾的7個值進行排序。我正在使用冒泡排序並創建兩個過程。但是,當我執行時,VBA告訴我下標超出範圍...有人能告訴我代碼中的問題在哪裏嗎?排序過程不起作用

Sub dort() 

    Dim plaga() As Variant 
    plaga = Worksheets("Sheet3").Range("A40:A46").Value 


    Call tri1(plaga) 

    Dim Destination As Range 
    Set Destination = Worksheets("Sheet3").Range("C40") 
    Destination.Resize(7, 1).Value = plaga 

End Sub 

Sub tri1(plaga As Variant) 


    Dim ligne_Deb As Long 
    Dim ligne_Fin As Long 

    ligne_Deb = LBound(plaga) 
    ligne_Fin = UBound(plaga) 

    Dim i As Long, j As Long 
    Dim tmp As Long 

     For i = ligne_Deb To ligne_Fin - 1 
     For j = ligne_Fin To i + 1 Step -1 
      If plaga(j) < plaga(j - 1) Then 
      tmp = plaga(j) 
      plaga(j) = plaga(j - 1) 
      plaga(j - 1) = tmp 
      End If 
     Next j 
     Next i 

End Sub 
+0

你爲什麼這樣排序使用Excel內置'Sort'對象,而不是?請記住,你的程序效率低下 –

回答

2

會有人能告訴我,是在我的代碼的問題,好嗎?

plaga = Worksheets("Sheet3").Range("A40:A46").Value 

當存儲在範圍的陣列,它不是一個一維數組。

更改您的代碼

plaga(j,1) 

通知的,1。把每一個地方都納入其中。

例如

For i = ligne_Deb To ligne_Fin - 1 
    For j = ligne_Fin To i + 1 Step -1 
     If plaga(j, 1) < plaga(j - 1, 1) Then 
      tmp = plaga(j, 1) 
      plaga(j, 1) = plaga(j - 1, 1) 
      plaga(j - 1, 1) = tmp 
     End If 
    Next j 
Next i 

Interesting read

+0

刷新頁面:)我更新了更改後的代碼:) –

+0

我這樣做,它告訴我需要一個對象.. – seigna

+0

它的工作!謝謝你太多了! – seigna